create extension if not exists ltree;
create extension if not exists pgtap;
create extension if not exists postgis;
create extension if not exists pgrouting;
create extension if not exists vector;
create extension if not exists pgcrypto;

create table adherent (
  id int primary key,
  nom text,
  prenom text,
  genre smallint,
  naissance date,
  codepostal text
);

create table famille (
  code text primary key,
  famille text,
  code_parent text, -- references famille(code)
  arborescence ltree
);

create table article (
  code text primary key,
  article text,
  famille_code text, -- references famille(code)
  factpoids boolean,
  unitevente int,
  prix decimal,
  suivistock int
);

create table ticket (
  id int primary key,
  date_ticket timestamp,
  adherent_id int,  -- references adherent(id)
  mode_rglt int
);

create table ligne (
  id int primary key,
  ticket_id int, --references ticket (id),
  article_code text, -- references article (code)
  prix_unitaire decimal,
  quantite decimal
);

create table fournisseur (
  id int primary key,
  fournisseur text not null
);

create table region (
  id int primary key,
  region text not null
);

insert into region values
  (1, 'Est'), (2, 'Ouest');

create table produit (
  id bigint null,
  nom text not null,
  marque text null,
  categorie text null,
  energie int not null,
  proteines float4 null,
  glucide float4 null,
  sucre float4 null,
  graisse float4 null,
  graisse_saturee float4 null,
  sel float4 null,
  fibres float4 null,
  nutriscore int null,
  additifs int null,
  additifs_list text[] null,
  potassium float null,
  calcium float null,
  magnesium float null,
  sodium float null,
  chlorure float null,
  sulfate float null,
  nitrate float null,
  hydrogenocarbonate float null,
  silice float null,
  fluor float null,
  residu float null,
  ph float null,
  vitamin_a float null,
  vitamin_c float null
);

comment on column produit.potassium IS 'K⁺ en mg/L';
comment on column produit.calcium IS 'Ca²⁺ en mg/L';
comment on column produit.magnesium IS 'Mg²⁺ en mg/L';
comment on column produit.sodium IS 'Na⁺ en mg/L';
comment on column produit.chlorure IS 'Cl⁻ en mg/L';
comment on column produit.sulfate IS 'SO₄²⁻ en mg/L';
comment on column produit.nitrate IS 'NO₃⁻ en mg/L';
comment on column produit.hydrogenocarbonate IS 'HCO₃⁻ en mg/L';
comment on column produit.silice IS 'SiO₂ en mg/L';
comment on column produit.fluor IS 'F en mg/L';
