Documentation[créer] [purger]
local p = {}

p.outils = require("Module:Population de France/Outils")
local wd = require("Module:Wikidata")

local function addRef(txt, args)
	return mw.getCurrentFrame():extensionTag{ name = "ref", content = txt, args = args }
end


local function source_canton(data)
	local resu
	if (data["premier"] >= 2013) then
		-- nouveau canton
		resu = "Base [[Institut national de la statistique et des études économiques|Insee]], population municipale à partir de 2013"
		local txt = "Fiches Insee - Populations légales du canton " .. p.outils.liste_annees(data)
		resu = resu .. addRef(txt .. ".") .. "."
	else  -- sinon canton plus ancien
		resu = "Base [[Institut national de la statistique et des études économiques|Insee]], [[Chiffres de population de la France|population sans doubles comptes]] à partir de 1962"
		resu = resu .. addRef("[https://www.insee.fr/fr/statistiques/1893204 Population selon le sexe et l'âge quinquennal de 1968 à 2013 - Recensements harmonisés - Séries départementales et communales]")
		resu = resu .. " puis [[Chiffres de population de la France#La population municipale|population municipale]] à partir de 2006"
		local txt = "Fiches Insee - Populations légales du canton " .. p.outils.liste_annees(data)
		resu = resu .. addRef( txt .. ".") .. "."
	end
	return resu
end

--[[
--]]
local function source_arrondissement(data)
local resu
	resu = "Base [[Institut national de la statistique et des études économiques|Insee]], [[Chiffres de population de la France|population sans doubles comptes]] à partir de 1962"
	resu = resu .. addRef("[https://www.insee.fr/fr/statistiques/1893204 Population selon le sexe et l'âge quinquennal de 1968 à 2013 - Recensements harmonisés - Séries départementales et communales]")
	resu = resu .. " puis [[Chiffres de population de la France#La population municipale|population municipale]] à partir de 2006"
	local txt = "Fiches Insee - Populations légales de l'arrondissement " .. p.outils.liste_annees(data)
	resu = resu .. addRef( txt .. ".") .. "."
	
	return resu
end

--[[
--]]
local function source_departement(data)
	local resu = "SPLAF - population totale du département depuis sa création jusqu'en 1962"
	resu = resu .. addRef( "[http://splaf.free.fr/ Site sur la Population et les Limites Administratives de la France - fiche historique du département]")
	resu = resu .. " − puis base Insee − population sans doubles comptes de 1968 à 2006"
	resu = resu .. addRef("[https://www.insee.fr/fr/statistiques/1893204 Population selon le sexe et l'âge quinquennal de 1968 à 2013 - Recensements harmonisés - Séries départementales et communales]")
	resu = resu .. " puis population municipale à partir de 2006"
	local txt = "Fiches Insee - Populations légales du département " .. p.outils.liste_annees(data)
	resu = resu .. addRef(txt) .. "."
	return resu
end

--[[
--]]
local function source_region(data)
	local resu
	if (data["premier"] >= 2013) then
		-- nouvelle région
		resu = "Base [[Institut national de la statistique et des études économiques|Insee]], population municipale à partir de 2015"
		local txt = "Fiches Insee - Populations légales de la région " .. p.outils.liste_annees(data)
		resu = resu .. addRef(txt .. ".") .. "."
	else  -- sinon région plus ancienne
		resu = "Base [[Institut national de la statistique et des études économiques|Insee]], [[Chiffres de population de la France|population sans doubles comptes]] à partir de 1962"
		resu = resu .. addRef("[https://www.insee.fr/fr/statistiques/1893204 Population selon le sexe et l'âge quinquennal de 1968 à 2013 - Recensements harmonisés - Séries départementales et communales]")
		resu = resu .. " puis [[Chiffres de population de la France#La population municipale|population municipale]] à partir de 2006"
		local txt = "Fiches Insee - Populations légales de la région " .. p.outils.liste_annees(data)
		resu = resu .. addRef(txt .. ".") .. "."
	end
	return resu
end

--[[
  Sous-fonction de celle ci-dessous : génère la référence Cassini
--]]
local function source_cassini(data)
	local resu = "Ldh/[[École des hautes études en sciences sociales|EHESS]]/Cassini jusqu'en 1999"
	local txt = ""
	if (data["source1"] ~= nil) then
		txt = txt .. "[" .. data["source1"] ..
		   " Des villages de Cassini aux communes d'aujourd'hui] sur le site de l'[[École des hautes études en sciences sociales]]."
		resu = resu .. addRef(txt, { name="Cassini" } )
	end
	return resu
end

--[[
  Sous-fonction de celle ci-dessous : génère la référence INSEE
--]]
local function source_insee(data, prem)
	local resu = "[[Institut national de la statistique et des études économiques|Insee]] à partir de "
	if (prem) then
		resu = resu .. data["premier"]
	else
		resu = resu .. "2006"
	end
	local txt = "Fiches Insee - Populations légales de la commune " .. p.outils.liste_annees(data)
	resu = resu .. addRef(txt .. ".")
	return resu
end

--[[
  fonction générant les sources
--]]

function p.sources(data)
	local resu
	
	-- on aiguille type autres que commune
	if (data["division"] == "canton") then
		return source_canton(data)
	end
	if (data["division"] == "département") then
		return source_departement(data)
	end
	if (data["division"] == "arrondissement") then
		return source_arrondissement(data)
	end
	if (data["division"] == "région") then
		return source_region(data)
	end
	if (data["division"] == "pays") then
		return nil -- par prudence
	end
	
	-- selon le type (commune) // note : en fait les communes n'ont pas de "division"…
	if ((data["division"] == "commune en DROM")) then
		resu = "[[Institut national de la statistique et des études économiques|Insee]] de 1968 à 2006"
		resu = resu .. addRef("[https://www.insee.fr/fr/statistiques/1893204 Population selon le sexe et l'âge quinquennal de 1968 à 2013 - Recensements harmonisés - Séries départementales et communales]" )
		resu = resu .. " puis à partir de 2006" .. addRef( p.outils.liste_annees(data))
	elseif ((data["division"] == "commune nouvelle")) then
		resu = source_insee(data, true) .. "."
	elseif (data["division"] == "commune en COM2") then
		resu = "[[Institut de la statistique de la Polynésie française]]" .. addRef(p.outils.liste_annees(data) ) .. "."
	elseif (data["division"] == "commune en COM1") then
		resu = "Base [[Institut national de la statistique et des études économiques|Insee]], [[Chiffres de population de la France|population sans doubles comptes]]"
		resu = resu .. " jusqu'en 1999"
		if (data["source1"] ~= nil) then
			resu = resu .. addRef("[" .. data["source1"] .. " " .. data["source1"] .. "]")
		end
		resu = resu .. " puis population municipale à partir de 2006"
		resu = resu .. addRef( p.outils.liste_annees(data) ) .. "."
	else -- par défaut
		resu = source_cassini(data)
		resu = resu .. " puis " .. source_insee(data) .. "."
	end
	if ((data["sources"] ~= nil) and (data["sources"] ~= "")) then
		resu = resu .. " " .. data["sources"]
	end

	return resu
end

function p.sources_graphique(data)
	local resu
	if ((data["division"] == "canton") or (data["division"] == "région") or
		(data["division"] == "arrondissement") or (data["division"] == "commune nouvelle") or
		(data["division"] == "commune en DROM") or (data["division"] == "commune en COM1") or
		(data["division"] == "commune en COM3")) then
		resu = "base Insee."
	elseif (data["division"] == "commune en COM2") then
		resu = "base IsPf."
	elseif (data["division"] == "département") then
		resu = "SPLAF et base Insee."
	else -- commune + commune nouvelle
		resu = "base Cassini de l'EHESS et base Insee."
	end
	return resu
end

function p.notes(data, vnom, country)
	if ((data["division"] == "canton") or (data["division"] == "commune nouvelle") or (data["division"] == "commune en COM1") or
		(data["division"] == "commune en COM2") or (data["division"] == "commune en COM3") or (data["division"] == "arrondissement")) then
		return nil
	elseif (data["division"] == "arrondissement") then
		return "De 1962 à 1999 : [[Chiffres de population de la France#Aspect statistique|population sans doubles comptes]] ; " ..
		       "pour les dates suivantes : [[Chiffres de population de la France#La population municipale|population municipale]]."
	elseif (data["division"] == "département") then
		return nil
	elseif (data["division"] == "région") then
		return nil
	elseif (data["division"] == "commune en DROM") then
		return "De 1961 à 1999 : [[Chiffres de population de la France#Aspect statistique|population sans doubles comptes]] ; " ..
		       "pour les dates suivantes : [[Chiffres de population de la France#La population municipale|population municipale]]."
	else -- le reste
		return "De 1962 à 1999 : [[Chiffres de population de la France#Aspect statistique|population sans doubles comptes]] ; " ..
		       "pour les dates suivantes : [[Chiffres de population de la France#La population municipale|population municipale]]."
	end
end

function p.introduction(param, id)
	local resu
	
	local divtype
	if wd.isInstance("Q21869758", id, 1) then
		divtype = "commune déléguée"
	elseif wd.isInstance("Q484170", id, 1) then
		divtype = "commune"
	elseif wd.isInstance("Q18524218", id, 1) then
		divtype = "canton"
	elseif wd.isInstance("Q194203", id, 1) then
		divtype = "arrondissement"
	elseif wd.isInstance("Q6465", id, 1) then
		divtype = "département"
	elseif wd.isInstance("Q36784", id, 1) then
		divtype = "région"
	else
		return err("the module does not currently handle" .. wd.formatStatements{property = "P31", entity = id})
	end

	resu = p.intro.introduction(data)

	return resu
end

function p.keepval(val, fields) -- valeurs à garder dans les tableaux
		-- recencement, on garde
	local method = val[fields.method]
	local d = val[fields.date]
	if (method == "Q39825") then
		return true
	end	
	
	-- interpolation or extrapolation du recencement quinquennal, on rejette
	if (method == "Q744069") or (method == "Q187631") then
		return false
	end

	-- enquête pour les communes de plus de 10 000 habs
	-- on garde 2006, 2011 et 2016
	if (method == "Q98415788") then
		local year = getYear(d,fields)
		if (d == "2006") or (d == "2011") or (d == "2016") then
			return true
		end
	end
	return true -- autres méthodes, erreurs ?
end

return p