Документация
--[[
------------------------------------------
--             AutoDescriptionAsteroid
-- Модуль для заполнения астероидов. 
------------------------------------------
--]]

local Dates = require("Module:Dates")
local Declension = require("Module:Declension")
local Langs = require("Module:Langs")
local MathTonumber = require("Module:Math/tonumber")
local ReturnGendered = require("Module:ReturnGendered")
local SerializeTable = require("Module:SerializeTable")
local Math = require("Module:Math")

local AutoDescriptionAsteroid={}

-- Нам необходимо сформировать и вернуть три переменных
local description = "" -- Описание
local details = "" -- Детали
local categories = "[[Категория:Астероиды по алфавиту]]" -- категории-- Промежуточный масив сущностей, в который помещаются результаты парсинга перед формированием описания

local entitiesArray = {discoverer={}}
local entitiesArrayP = {P31="", P61="", P196="", P575=""}
--P196 := minor planet group

-- Точка входа
function AutoDescriptionAsteroid.launch(entity)
 AutoDescriptionAsteroid.parsing(entity) -- парсим карточку викиданных
 AutoDescriptionAsteroid.forming() -- формируем переменные
 return details, description, categories
end	

-- Последовательно проходим свойства в карточке викиданных, для формирования массива сущностей entitiesArray
function AutoDescriptionAsteroid.parsing(entity)
	entitiesArrayP["P31"] = AutoDescriptionAsteroid.parseP31(entity)
	entitiesArrayP["P61"] = AutoDescriptionAsteroid.parseP61(entity)
	entitiesArrayP["P196"] = AutoDescriptionAsteroid.parseP196(entity)
	entitiesArrayP["P575"] = AutoDescriptionAsteroid.parseP575(entity)
end

function AutoDescriptionAsteroid.forming()
	
	if(entitiesArrayP["P31"] == "астероид") then description = description .. "[[Астероиды|астероид]]." 
	else description = description .. entitiesArrayP["P31"] .. "." 
	end
	
	if(entitiesArrayP["P575"] ~= "") then 
		local data = entitiesArrayP.P575
		if (#data > 4) then
			description = description .. " Дата открытия: " .. "[[" .. data .. " года]]." 
		else
			description = description:sub(1, #description - 1) .. "открытый в [[" .. data .. " год]]у." 
		end
		
		local year = data:sub(#data - 4, #data)
		categories = categories .. "[[Категория:Астероиды, открытые в "..year.." году".."]]" -- Добавляется категория Астероиды * года
	end 
	if(entitiesArrayP["P61"] == "full") then
		if(entitiesArray["discoverer"][2] == nil) then description = description .. " Первооткрыватель: [[" .. entitiesArray["discoverer"][1] .. "]]."
		else
			description = description .. " Первооткрыватели: " 
			for k, v in pairs (entitiesArray.discoverer) do
				description = description .. "[[" .. v.. "]]" .. ", "
			end	
			description=description:sub(1, #description - 2)
        	description=description..". " 
		end	
	end	
	
	if(entitiesArrayP["P196"] ~= "") then
		description = description .. "Группа малых планет: " .. entitiesArrayP.P196 .. "."
		local minorPlanet = entitiesArrayP.P196:sub(1,1):upper() .. entitiesArrayP.P196:sub(2) --Капитализирую первый символ для категории
		categories = categories .. "[[Категория:" .. minorPlanet .. "]]"
	end
	
end

function AutoDescriptionAsteroid.parseP31(entity)
 local value = entity:formatPropertyValues("P31", mw.wikibase.entity.claimRanks).value
 if(value ~= "") then return value 
 else return ""	end
end	

function AutoDescriptionAsteroid.parseP61(entity)
 local p61Statements=entity:getAllStatements("P61")
 local i=1
 for ki, vi in pairs (p61Statements) do
 	if(vi['mainsnak'] ~= nil) then
 		entitiesArray['discoverer'][i]=mw.wikibase.getLabel(vi['mainsnak']['datavalue']['value']['id'])
 		i = i + 1
 	end	
 end	
 if(i > 1) then return "full"
 else return "" end	
end	

function AutoDescriptionAsteroid.parseP196(entity)
 local value = entity:formatPropertyValues("P196", mw.wikibase.entity.claimRanks).value
 if(value ~= "") then return value 
 else return ""	end
end	

function AutoDescriptionAsteroid.parseP575(entity)
 local value = entity:formatPropertyValues("P575", mw.wikibase.entity.claimRanks).value
 if(value ~= "") then 
 	if(string.find(value, ",")) then 
 		local trash = string.match(value, ',.*')
 		value = string.gsub(value, trash, '') 
 	end
 	return value 
 else return ""	end
end	

return AutoDescriptionAsteroid