#!/usr/bin/perl

use strict;
use warnings;

use PDF::FDF::Simple;
use Data::Dumper;
use DateTime;

my $membres = [];

my $fede = {
	'titre' => "\nFédération des fournisseurs d'accès à Internet associatifs (Fédération FDN)",
	'signature' => 'Benjamin Bayart, président',
	'siege' => 'Amiens',
	'waldec' => 'W751210904',
};

my $fdn = {
	'type' => 'stay', # init', 'add', 'del', 'stay'
	'siren' => '419897855',
	'waldec' => 'W751107563',
	'prefecture' => 'Paris',
	'titre' => "                  French Data Network (Réseau Français de Données)",
	'objet' => "                  La promotion, l'utilisation et le développement des réseaux Internet et Usenet dans le respect de leur éthique en favorisant en particulier les utilisations à des fins de recherche ou d'éducation sans volonté commerciale.",
	'siege' => 'chez Benjamin Bayart, 10 rue du Croissant',
	'cp' => '75002',
	'ville' => 'Paris'
};
push @$membres, $fdn;

my $ldn = {
	'type' => 'stay', # init', 'add', 'del', 'stay'
	'siren' => '528368624',
	'waldec' => 'W543005639',
	'prefecture' => 'Nancy',
	'titre' => "                  Lorraine Data Network",
	'objet' => "                  Promotion, utilisation et développement des réseaux Internet dans le respect de leur éthique en favorisant en particulier les utilisateurs à des fins de recherche ou d'éducation sans volonté commerciale",
	'siege' => '213, rue des Vignerons',
	'cp' => '54600',
	'ville' => 'Villers-lès-Nancy'
};
push @$membres, $ldn;

my $aqn = {
	'type' => 'stay', # init', 'add', 'del', 'stay'
	'siren' => '527777767',
	'waldec' => 'W332010849',
	'prefecture' => 'Gironde',
	'titre' => "                  Aquilenet",
	'objet' => "                  Promotion, utilisation et développement du réseau Internet dans le respect de son éthique en favorisant en particulier les utilisations à des fins de recherche ou d'éducation sans volonté commerciale.",
	'siege' => "155, cours de la Somme, Bât. G",
	'cp' => '33800',
	'ville' => 'Bordeaux'
};
push @$membres, $aqn;

my $ilico = {
	'type' => 'stay', # init', 'add', 'del', 'stay'
	'siren' => '525018727',
	'waldec' => 'W192001666',
	'prefecture' => 'Corrèze',
	'titre' => "                  Association Ilico (Internet Libre en Corrèze)",
	'objet' => "                  Promouvoir l'utilisation et le développement du réseau Internet, c'est-à-dire le réseau public routé par le procole IP, constitué des systèmes autonomes reconnus par l'IANA ; favoriser les utilisation de ce réseau à des fins de recherche et d'éducation sans volonté commerciale et enfin, de défendre la neutralité de ce réseau.",
	'siege' => "Mairie, Le Bourg",
	'cp' => '19330',
	'ville' => 'Chanteix'
};
push @$membres, $ilico;

my $sames = {
	'type' => 'stay', # init', 'add', 'del', 'stay'
	'siren' => '514034230',
	'waldec' => 'W641003539',
	'prefecture' => 'Bayonne',
	'titre' => "                  Sames wireless",
	'objet' => "                  Mettre en oeuvre et administrer un réseau informatique local desservant les habitations du quartier saint jean de sames puis d'autres habitations du bourg pour mutualiser des facilités informatiques comprenant un accès à l'Internet à haut débit sans obligation de résultat.",
	'siege' => "Mairie",
	'cp' => '64520',
	'ville' => 'Sames'
};
push @$membres, $sames;

my $teta = {
	'type' => 'stay', # init', 'add', 'del', 'stay'
	'siren' => '529558710',
	'waldec' => 'W313015266',
	'prefecture' => 'Toulouse',
	'titre' => "                  Tetaneutral.net",
	'objet' => "                  Promouvoir l'utilisation et le développement du réseau Internet, c'est à dire le réseau public, routé par le protocole IP, constitué des systèmes autonomes reconnus par l'IANA ; de favoriser les utilisations de ce réseau à des fins scientifiques, sociales, de recherche, d'éducation, de culture et artistiques sans volonté commerciale, de favoriser la compréhension du réseau Internet et de ses enjeux par le public et enfin, de défendre la neutralité de ce réseau.",
	'siege' => "chez Marc Bruyere, 10 place Saint Julien",
	'cp' => '31000',
	'ville' => 'Toulouse'
};
push @$membres, $teta;

my $franci = {
	'type' => 'stay', # init', 'add', 'del', 'stay'
	'siren' => '529187775',
	'waldec' => 'W941006323',
	'prefecture' => 'Val-de-Marne',
	'titre' => "                  Franciliens.net",
	'objet' => "                  Promotion, utilisation et développement du réseau Internet dans le respect de sa neutralité et de son éthique en favorisant en particulier les utilisations à des fins de recherche ou d'éducation sans volonté commerciale; l'association a vocation à intervenir sur le territoire de la région Île de France.",
	'siege' => "Chez Pierre Crémault, 96 avenue du Général de Gaulle",
	'cp' => '94700',
	'ville' => 'Maisons-Alfort'
};
push @$membres, $franci;

my $ndn = {
	'type' => 'add', # 'del', 'stay'
	'siren' => '535078745',
	'waldec' => 'W062004992',
	'prefecture' => 'Nice',
	'titre' => "                  Nice Data Network",
	'objet' => "                  Promouvoir l'utilisation et le développement du réseau Internet, c'est à dire le réseau public, routé par le protocole IP, constitué des systèmes autonomes reconnus par l'IANA ; de favoriser les utilisations de ce réseau à des fins de recherche et d'éducation sans volonté commerciale et enfin, de défendre la neutralité de ce réseau.",
	'siege' => "chez Damien Nicolas, 26 boulevard Pierre Sola",
	'cp' => '06300',
	'ville' => 'Nice'
};
push @$membres, $ndn;

my $iloth = {
	'type' => 'add', # 'del', 'stay'
	'siren' => '525190153',
	'waldec' => 'W343011615',
	'prefecture' => 'Montpellier',
	'titre' => "                  Internet Libre et Ouvert pour Tous dans l'Hérault (ILOTH)",
	'objet' => "                  La promotion, l'utilisation et le développement de l'Internet libre et ouvert pour tous dans le pur respect de sa neutralité sans aucune volonté commerciale.",
	'siege' => "480 rue de Centrayrargues, RES. Imperator BAT. A1",
	'cp' => '34070',
	'ville' => 'Montpellier'
};
push @$membres, $iloth;

my $rhizome = {
	'type' => 'add', # 'del', 'stay'
	'siren' => '532135167',
	'waldec' => 'W603002591',
	'prefecture' => 'Compiègne',
	'titre' => "                  Rhizome",
	'objet' => "                  Fournir un accès internet aux étudiants Compiègnois, et personnels des universités compiègnoises. Fournir un accès internet aux personnes intéressées dont le logement est couvert par le réseau. Défendre un développement du réseau internet aidant à la liberté d'expression, entre autre par le respect du principe de neutralité du net et de l'acentrisme du réseau.",
	'siege' => "Université Technologique de Compiègne, Maison des étudiants, BP 60319, rue Roger Couttolenc",
	'cp' => '60203',
	'ville' => 'Compiègne Cedex'
};
push @$membres, $rhizome;

push @$membres, {
	'type' => 'add', # 'del', 'stay'
	'siren' => '530379585',
	'waldec' => 'W442007822',
	'prefecture' => 'Nantes',
	'titre' => "                  FAIMaison",
	'objet' => "                  L'Association a pour but : la pro-motion, l'utilisation et le développement des réseaux Internet dans le respect de leur éthique en favorisant en particulier les utilisations à des fins de recherche ou d'éducation sans volonté commerciale.",
	'siege' => "chez M. Doute, 4 rue Charles Laisant",
	'cp' => '44100',
	'ville' => 'Nantes'
},{
	'type' => 'add', # 'del', 'stay'
	'siren' => '539453191',
	'waldec' => 'W691079199',
	'prefecture' => 'Lyon',
	'titre' => "                  Illyse",
	'objet' => "                  Cette association, sans volonté commerciale, a pour but de promouvoir l'utilisation et le développement du réseau Internet (c'est à dire le réseau public, routé par le protocole IP (Internet Protocol), constitué des systèmes autonomes (AS) reconnus par l'IANA (Internet Assigned Numbers Authority) et de tous réseaux de télécommunication numériques bi-directionnels ; de favoriser les utilisations de ces réseaux à des fins de recherche et d'éducation et enfin de défendre la neutralité de ces réseaux. Elle s'autorise toute action pour parvenir à ces fins.",
	'siege' => "chez Jérémie Monnet, 20 cours de la République",
	'cp' => '69100',
	'ville' => 'Villeurbanne'
},{
	'type' => 'add', # 'del', 'stay'
	'siren' => '539592931',
	'waldec' => 'W381012512',
	'prefecture' => 'Grenoble',
	'titre' => "                  Rézine",
	'objet' => "                  L'association a pour but de faciliter l'usage des outils de communication électronique et d'en développer leurs critiques. Ceci dans une optique de réappropriation horizontale et décentralisée de ces outils, autour de Grenoble et de sa périphérie. Dans ce cadre l'association s'efforcera de fournir un accès à Internet aux membres qui le souhaitent.",
	'siege' => "22 rue des violettes",
	'cp' => '38000',
	'ville' => 'Grenoble'
},{
	'type' => 'add', # 'del', 'stay'
	'siren' => '538396094',
	'waldec' => 'W742001889',
	'prefecture' => 'Bonneville',
	'titre' => "                  Sallanches Data Network",
	'objet' => "                  Promouvoir l'utilisation et le développement des réseaux internet. Réappropriation des moyens de communication par ceux qui les utilisent. Respect de la neutralité et de l'éthique de l'accès au réseau internet. L'utilisation des outils de communication à des fins d'éducation et de recherche sans volonté commerciale.",
	'siege' => "148 avenue de la Gare, Le Fayet",
	'cp' => '74170',
	'ville' => 'Saint-Gervais-Les-Bains'
},{
	'type' => 'add', # 'del', 'stay'
	'siren' => '',
	'waldec' => 'W772002480',
	'prefecture' => 'Seine-et-Marne',
	'titre' => "                  NETOPI",
	'objet' => "                  Fournir à ses adhérents la possibilité d'accéder en haut et très haut débit aux réseaux internet et usenet, en particulier dans les zones rurales peu ou pas desservies.",
	'siege' => "5, rue Louis Victor Dortee",
	'cp' => '77220',
	'ville' => 'Favières'
},{
	'type' => 'add', # 'del', 'stay'
	'siren' => '753115526',
	'waldec' => 'W161004371',
	'prefecture' => 'Angoulème',
	'titre' => "                  Association du Poitou pour la neutralité du net",
	'objet' => "                  L'association a pour but la promotion, l'utilisation et le développement du réseau Internet dans le respect de sa neutralité et de son éthique en favorisant, en particulier, les utilisations à des fins scientifiques, sociales, de recherche, d'éducation, de culture et artistiques sans volonté commerciale.",
	'siege' => "95 route de Breuty",
	'cp' => '16400',
	'ville' => 'La Couronne'
},{
	'type' => 'add', # 'del', 'stay'
	'siren' => '752971960',
	'waldec' => '',
	'prefecture' => 'Strasbourg',
	'titre' => "                  Alsace Réseau Neutre",
	'objet' => "                  L'association a pour objet : la promotion d'internet et le développement de tous ses usages, dans le respect des libertés individuelles (en particulier la vie privée) et de la neutralité des réseaux. La neutralité des réseaux pose le principe de l'égalité de traitement de tous les flux de données par les réseaux qui les transportent, notamment s'agissant d'internet.",
	'siege' => "18 rue Frédéric",
	'cp' => '67100',
	'ville' => 'Strasbourg'
},{
	'type' => 'add', # 'del', 'stay'
	'siren' => '420015075',
	'waldec' => 'W891003791',
	'prefecture' => 'Auxerre',
	'titre' => "                  Association pour le développement des nouvelles technologies en milieu rural PC-Light",
	'objet' => "                  L'association a pour but : fournisseur d'accès internet, couvrir en priorité les zones blanches et grises du département de l'Yonne, l'initiation aux nouvelles technologies, le partage de connaissances informatique.",
	'siege' => "15 route de Chaumont",
	'cp' => '89240',
	'ville' => 'Escamps'
},{
	'type' => 'add', # 'del', 'stay'
	'siren' => '524664190',
	'waldec' => 'W133014921',
	'prefecture' => 'Marseille',
	'titre' => "                  Teleragno",
	'objet' => "                  L'association a pour but : la promotion, l'utilisation et le développement des réseaux Internet et Usenet dans le respect de leur éthique en favorisant en particulier les utilisations à des fins de recherche ou d'éducation sans volonté commerciale.",
	'siege' => "La Bastille Neuve, bâtiment F, 17 rue Saint-Jean du Déser",
	'cp' => '13012',
	'ville' => 'Marseille'
},{
	'type' => 'add', # 'del', 'stay'
	'siren' => '790714398',
	'waldec' => 'W513002966',
	'prefecture' => 'Reims',
	'titre' => "                  CAFAI Champagne Ardenne Fournisseur Associatif d'Accès À Internet",
	'objet' => "                  L'association a pour but : la promotion, l'utilisation et le développement du réseau Internet dans le respect de son éthique et de sa neutralité en favorisant sa compréhension et son enjeu par le public, ainsi que son utilisation à des fins de recherche ou d'éducation sans volonté commerciale.",
	'siege' => "36 rue de Vesle",
	'cp' => '51100',
	'ville' => 'Reims'
},{
	'type' => 'add', # 'del', 'stay'
	'siren' => '799899281',
	'waldec' => 'W632005927',
	'prefecture' => 'Clermont-Ferrand',
	'titre' => "                  AuverNET",
	'objet' => "                  Cette association a pour objet de promouvoir l'utilisation et le développement du réseau internet, c'est à dire le réseau public, routé par le protocole IP, constitué des systèmes autonomes reconnus par l'IANA.",
	'siege' => "chez Matthieu Bourlon, 56 av. Charras",
	'cp' => '63000',
	'ville' => 'Clermont-Ferrand'
},{
	'type' => 'add', # 'del', 'stay'
	'siren' => '528511272',
	'waldec' => 'W712002569',
	'prefecture' => 'Chalon-sur-Saône',
	'titre' => "                  Chaul'Hertz",
	'objet' => "                  Cette Association a pour objet la création d'un réseau numérique sans fil et son utilisation par les membres de l'association.",
	'siege' => "7, rue de Vaulvry",
	'cp' => '71620',
	'ville' => 'Saint-Maurice-en-Rivière'
},{
	'type' => 'add', # 'del', 'stay'
	'siren' => '',
	'waldec' => 'W353011604',
	'prefecture' => 'Rennes',
	'titre' => "                  Groupe Rennais pour un Internet Fourni de Manière Ouverte et Neutre",
	'objet' => "                  Grifon a pour but la promotion, l'utilisation et le développement d'Internet (au sens de l'ensemble des réseaux IP routés publics).",
	'siege' => "7 rue de la Rivière, Appt 103",
	'cp' => '35510',
	'ville' => 'Cesson-Sévigné'
},{
	'type' => 'add', # 'del', 'stay'
	'siren' => '749994216',
	'waldec' => 'W751212717',
	'prefecture' => 'Saint-Barthélemy',
	'titre' => "                  Igwan.net",
	'objet' => "                  L'association a pour objet de promouvoir et favoriser : l'accès à tous, quelque soit sa situation sociale ou géographique, aux réseaux de communication électronique, dont internet, et à leurs applications.",
	'siege' => "BP 1302, Grand cul de sac",
	'cp' => '97133',
	'ville' => 'Saint-Barthélemy'
},{
	'type' => 'add', # 'del', 'stay'
	'siren' => '750870651',
	'waldec' => 'W812003435',
	'prefecture' => 'Castres',
	'titre' => "                  A.I.L. Network Pays Autan",
	'objet' => "                  Ail-Network du Pays de l'Autan a pour vocation d'offrir un accès à Internet particulièrementceux qui en sont démunis, et de promouvoir un INTERNET libre, solidaire, citoyen et local.",
	'siege' => "7 rue Meyer",
	'cp' => '81200',
	'ville' => 'Mazamet'
};

my $vierge = {
	'type' => 'add', # 'del', 'stay'
	'siren' => '',
	'waldec' => 'W',
	'prefecture' => 'Ville',
	'titre' => "\nNom asso",
	'objet' => "\nObjet de l'asso",
	'siege' => "chez ...",
	'cp' => '00000',
	'ville' => 'Ville'
};
#push @$membres, $vierge;

my $fields = <<EOF;
'form1[0].Page1[0].Adhesion[0]';
'form1[0].Page1[0].Code_SIREN[0]';
'form1[0].Page1[0].Comp_Init[0]';
'form1[0].Page1[0].Comp_Modif[0]';
'form1[0].Page1[0].Date_declaration[0]';
'form1[0].Page1[0].Imprimer1[0]';
'form1[0].Page1[0].Lieu_declaration[0]';
'form1[0].Page1[0].Nbre_Init[0]';
'form1[0].Page1[0].Nbre_Modif[0]';
'form1[0].Page1[0].Nom_declarant[0]';
'form1[0].Page1[0].NumCerfa[0]';
'form1[0].Page1[0].Num_Waldec[0]';
'form1[0].Page1[0].Retrait[0]';
'form1[0].Page1[0].Réinitialiser1[0]';
'form1[0].Page1[0].Titre_Long[0]';
'form1[0].Page2[0].Adresse_Siege_Asso[0]';
'form1[0].Page2[0].Adresse_Siege_Asso[1]';
'form1[0].Page2[0].Adresse_Siege_Asso[2]';
'form1[0].Page2[0].Associations_Tiers[0]';
'form1[0].Page2[0].Associations_Tiers[1]';
'form1[0].Page2[0].Associations_Tiers[2]';
'form1[0].Page2[0].Code_SIREN_Asso[0]';
'form1[0].Page2[0].Code_SIREN_Asso[1]';
'form1[0].Page2[0].Code_SIREN_Asso[2]';
'form1[0].Page2[0].Codepostal_Asso[0]';
'form1[0].Page2[0].Codepostal_Asso[1]';
'form1[0].Page2[0].Codepostal_Asso[2]';
'form1[0].Page2[0].Commune_Asso[0]';
'form1[0].Page2[0].Commune_Asso[1]';
'form1[0].Page2[0].Commune_Asso[2]';
'form1[0].Page2[0].Num_Waldec[0]';
'form1[0].Page2[0].Num_Waldec_Asso[0]';
'form1[0].Page2[0].Num_Waldec_Asso[1]';
'form1[0].Page2[0].Num_Waldec_Asso[2]';
'form1[0].Page2[0].Objet_Asso[0]';
'form1[0].Page2[0].Objet_Asso[1]';
'form1[0].Page2[0].Objet_Asso[2]';
'form1[0].Page2[0].Prefecture[0]';
'form1[0].Page2[0].Prefecture[1]';
'form1[0].Page2[0].Prefecture[2]';
'form1[0].Page2[0].Titre_Asso[0]';
'form1[0].Page2[0].Titre_Asso[1]';
'form1[0].Page2[0].Titre_Asso[2]';
'form1[0].Page2[0].Titre_Long[0]';
EOF


my $date;
my $nbasso = 0;
my $nbadd = 0;
my $nbdel = 0;
my $type   = 'init';

sub faire_page($$) {
	my ( $values, $page ) = @_;
	my $fdf = new PDF::FDF::Simple ();
	$fdf->filename('13969.fdf');
	$fdf->load();
	$fdf->content($values);
	$fdf->save('test.fdf');
	my $keep;
	if ( $page eq 'garde' ) {
		$keep = 1;
	} else {
		$keep = 2;
	}
	`pdftk cerfa_13969-01.pdf fill_form test.fdf output - | pdftk - cat $keep output page$page.pdf`;
	return "page$page.pdf";
}

sub page_garde {
	my $values = {
		'form1[0].Page1[0].Titre_Long[0]' => $fede->{'titre'},
		'form1[0].Page1[0].Nom_declarant[0]' => $fede->{'signature'},
		'form1[0].Page1[0].Date_declaration[0]' => $date,
		'form1[0].Page1[0].Lieu_declaration[0]' => $fede->{'siege'},
	};
	if ( $fede->{'waldec'} ) {
		$values->{'form1[0].Page1[0].Num_Waldec[0]'} = $fede->{'waldec'};
	}
	if ( $type eq 'init' ) {
		$values->{'form1[0].Page1[0].Comp_Init[0]'} = 1;
		$values->{'form1[0].Page1[0].Nbre_Init[0]'} = $nbasso;
	} else {
		$values->{'form1[0].Page1[0].Comp_Modif[0]'} = 1;
		$values->{'form1[0].Page1[0].Nbre_Modif[0]'} = $nbasso;
		$values->{'form1[0].Page1[0].Retrait[0]'} = $nbadd;
		$values->{'form1[0].Page1[0].Adhesion[0]'} = $nbdel;
	}
	return faire_page($values, 'garde');
}

sub page_asso(@) {
	my @a = @_;
	my $pg = pop @a;
	my $values = {};
	$values->{'form1[0].Page2[0].Num_Waldec[0]'} = $fede->{'waldec'};
	$values->{'form1[0].Page2[0].Titre_Long[0]'} = $fede->{'titre'};
	for my $n ( 0..2) {
		next if ! defined $a[$n];
		$values->{"form1[0].Page2[0].Adresse_Siege_Asso[$n]"} = $a[$n]->{'siege'};
#		$values->{"form1[0].Page2[0].Associations_Tiers[0]"} = 'XXX';
		$values->{"form1[0].Page2[0].Code_SIREN_Asso[$n]"} = $a[$n]->{'siren'};
		$values->{"form1[0].Page2[0].Codepostal_Asso[$n]"} = $a[$n]->{'cp'};
		$values->{"form1[0].Page2[0].Commune_Asso[$n]"} = $a[$n]->{'ville'};
		$values->{"form1[0].Page2[0].Num_Waldec_Asso[$n]"} = $a[$n]->{'waldec'};
		$values->{"form1[0].Page2[0].Objet_Asso[$n]"} = $a[$n]->{'objet'};
		$values->{"form1[0].Page2[0].Prefecture[$n]"} = $a[$n]->{'prefecture'};
		$values->{"form1[0].Page2[0].Titre_Asso[$n]"} = $a[$n]->{'titre'};
	}
	return faire_page($values, $pg);
}

sub declaration() {
	my $now = DateTime->now;
	$date = $now->strftime("%A %d %B %Y");
	$date = "20 septembre 2014";
	if ( $type eq 'init' ) {
		for my $m ( @$membres ) {
			$m->{'type'} = 'init';
		}
		$nbasso = @$membres;
		$nbadd = $nbdel = 0;
	} else {
		for my $m ( @$membres ) {
			if ( $m->{'type'} eq 'del' ) {
				$nbdel++; next;
			}
			if ( $m->{'type'} eq 'add' ) {
				$nbadd++; $nbasso++; next;
			}
			if ( $m->{'type'} eq 'stay') {
				$nbasso++; next;
			}
			if ( $m->{'type'} eq 'init' ) {
				$m->{'type'} = 'stay';
				$nbasso++; next;
			}
			die "Je ne connais pas ce type '$m->{'type'}' pour ".Dumper($m);
		}
	}
	my @pages;
	my $i = 1;
	push @pages, page_garde();
	while ( @$membres ) {
		my $a1 = shift @$membres;
		my $a2 = shift @$membres;
		my $a3 = shift @$membres;
		push @pages, page_asso($a1, $a2, $a3, $i++);
	}
	my $input = "";
	my $cat = "";
	for my $p ( @pages ) {
		$input .= " $p";
		$cat .= "";
	}
	`pdftk $input cat $cat output xx.pdf`;
}

$type = 'add';
declaration();


