-- pour creer un stock  de vins : bornes [annee_min,annees_max]
CREATE OR REPLACE FUNCTION peuple_stock(annee_debut integer, annee_fin integer) RETURNS bigint as
$$
DECLARE
	v_annee integer;
	v_nombre integer;
	v_contenant_id integer;
	v_vin_id integer;
	compteur bigint :=0;
	annees integer;
	contenants integer;
	vins integer;
	tuples_a_generer integer;

BEGIN

  -- vider la table de stock
  truncate table stock;

  -- calculer le nombre d'annees 
  select (annee_fin-annee_debut)+1 into annees;

  -- nombre de contenants
  select count(*) from contenant into contenants;

  -- nombre de vins
  select count(*) from vin into vins;

  -- calcul des combinaisons
  select annees*contenants*vins into tuples_a_generer;
 
  --on boucle sur tous les millesimes: disons 1930 a 2000
  -- soit 80 annees
  for v_annee in annee_debut .. annee_fin loop

    -- on boucle sur les contenants possibles
    for v_contenant_id in 1 .. contenants loop
  
       -- idem pour l'id du vin
      for v_vin_id in 1 .. vins loop
  
        -- on prends un nombre de bouteilles compris entre 6 et 18
        select round(random()*12)+6
        into v_nombre;
  
        -- insertion dans la table de stock
        insert into stock (vin_id, contenant_id, annee, nombre)
        values (v_vin_id, v_contenant_id, v_annee, v_nombre);
  
        if (((compteur%1000)=0) or (compteur=tuples_a_generer)) then
          raise notice 'stock : % sur % tuples generes', compteur, tuples_a_generer;
        end if;
 
        compteur := compteur + 1;
   
      end loop; --fin boucle vin
  
    end loop; -- fin boucle contenant

  end loop; --fin boucle annee

  RETURN compteur;

END;
$$ LANGUAGE plpgsql;
