local p = {};

function p.formatAwardsProperty( context, options )
	if not context then error( 'context not specified' ); end;
	if not options then error( 'options not specified' ); end;
	if not options.entity then error( 'options.entity missing' ); end;

    local claims = context.selectClaims( options, options.property );
    if claims == nil then
        return ''; --TODO error?
    end

    -- Обход всех заявлений утверждения и с накоплением оформленых предпочтительных 
    -- заявлений в таблице
    local formattedClaims = {};

    for i, claim in ipairs( claims ) do
        local formattedStatement = context.formatStatement( options, claim );
        -- здесь может вернуться либо оформленный текст заявления
        -- либо строка ошибки nil похоже никогда не возвращается
        if formattedStatement then
            formattedStatement = '<span class="wikidata-claim" data-wikidata-property-id="' ..
            	string.upper( options.property ) .. '" data-wikidata-claim-id="' .. claim.id .. '">' ..
            	formattedStatement .. '</span>';
            table.insert( formattedClaims, formattedStatement );
        end
    end

	-- создание текстовой строки со списком оформленых заявлений из таблицы  
    local out = mw.text.listToText( formattedClaims, ';\n* ', ';\n* ' );
    if out ~= '' then
    	out = '* ' .. out;
	end
	out = out .. '.'
    return out
end

function p.formatAwardClaim( context, options, statement )
	local result = '';
	if not statement or statement.mainsnak.snaktype ~= 'value' then
		return result;
	end

	result = result .. context.formatSnak( options, statement.mainsnak, {} );

	if statement.qualifiers and statement.qualifiers.P585 then
		result = result .. ' (' .. context.formatSnak( options, statement.qualifiers.P585[ 1 ] ) .. ')';
	end

    -- TODO: filter only russian text
	if statement.qualifiers and statement.qualifiers.P6208 then
		result = result .. ' — \'\'' .. context.formatSnak( options, statement.qualifiers.P6208[ 1 ] ) .. '\'\'';
	end

	result = result .. context.formatRefs( options, statement );

	return result;
end

function p.formatAwardValue( context, options, statement )
	return context.formatValueDefault( context, options, statement );
end

return p;