local Wikidata2 = require('Module:Wikidata2').formatStatementsFromLua

local p = {}

local alies = {
    ["barlist"] = { "قائمة شريطية" }, 
    ["page"] = { "مقالة" }, 
    ["entityId"] = { "صفحة" ,  "id",  "معرف ويكي بيانات",  "qid",  "",  "" }, 
    ["property"] = {   "خاصية",  "",  "",  "",  "" }, 
    ["formatcharacters"] = { "formatcharacters" ,  "",  "",  "",  "",  "" }, 
    ["addTrackingCat"] = { "" , "",  "",  "",  "",  "" }, 
    ["category"] = {  "تصنيف",  "",  "",  "",  "" }, 
    ["noicon"] = { "إيقونة" ,  "رمز",  "",  "",  "",  "" }, 
    ["nocate"] = { "دون تصنيف" ,  "",  "",  "",  "",  "" }, 
    ["icon2"] = { "icon2" ,  "",  "",  "",  "",  "" }, 
    ["urllabel"] = { "urllabel" ,  "",  "",  "",  "",  "" }, 
    ["mainsuffixAfterIcon"] = { "لاحقة2" ,  "",  "",  "",  "",  "" }, 
    ["mainprefix"] = { "سابقة" ,  "بادئة",  "",  "",  "",  "" }, 
    ["mainsuffix"] = { "لاحقة" ,  "",  "",  "",  "",  "" }, 
    
    ["property1"] = { "خاصية قيمة" ,  "",  "",  "",  "",  "" }, 
    
    ["property1rank"] = { "property1rank" ,  "",  "",  "",  "",  "" }, 
    ["property1after"] = { "property1after" ,  "",  "",  "",  "",  "" }, 
    ["property1formatting"] = { "property1formatting" ,  "",  "",  "",  "",  "" }, 
    ["property1pref"] = { "سابقة خاصية قيمة" ,  "",  "",  "",  "",  "" }, 
    ["property1suff"] = { "لاحقة خاصية قيمة" ,  "",  "",  "",  "",  "" }, 
    
    ["image"] = { "image" ,  "صورة",  "",  "",  "",  "" }, 
    ["center"] = { "center" ,  "",  "",  "",  "",  "" }, 
    ["size"] = { "حجم صورة" ,  "",  "",  "",  "",  "" }, 
    ["formatting"] = { "formatting" ,  "",  "",  "",  "",  "" }, 
    ["illwd2"] = { "illwd2" ,  "",  "",  "",  "",  "" }, 
    ["pattern"] = { "نمط" ,  "",  "",  "",  "",  "" }, 
    ["NoPropValue"] = { "تصنيف 3" ,  "تصنيف3",  "بديل",  "",  "",  "" }, 
    ["langpref"] = { "langpref" ,  "",  "",  "",  "",  "" }, 
    ["noref"] = { "مراجع" ,  "مراجع ويكي بيانات",  "",  "",  "",  "" }, 
    ["numberofreferences"] = { "numberofreferences" ,  "",  "",  "",  "",  "" }, 
    ["justthisqual"] = { "justthisqual" ,  "تصفية فقط",  "",  "",  "",  "" }, 
    ["modifytime"] = { "" ,  "",  "",  "",  "",  "" }, 
    ["rank"] = { "rank" ,  "",  "",  "",  "",  "" }, 
    ["bothdates"] = { "بداية ونهاية" ,  "",  "",  "",  "",  "" }, 
    ["withdate"] = { "نقطة" ,  "",  "",  "",  "",  "" }, 
    ["firstvalue"] = { "واحد فقط" ,  "وصلة كاملة",  "",  "",  "",  "" }, 
    ["modifyqualifiertime"] = { "modifyqualifiertime" ,  "",  "",  "",  "",  "" }, 
    ["enlabelcate"] = { "enlabelcate" ,  "",  "",  "",  "",  "" }, 
    
    ["qual1"] = { "تصفية" ,  "",  "",  "",  "",  "" }, 
    ["qual1pref"] = { "سابقة تصفية" ,  "",  "",  "",  "",  "" }, 
    
    ["qual1pref"] = { "سابقة تصفية" ,  "",  "",  "",  "",  "" }, 
    ["qual1a"] = { "تصفية1" ,  "",  "",  "",  "",  "" }, 
    ["qp1apref"] = { "سابقة تصفية1" ,  "",  "",  "",  "",  "" }, 
    ["qual2"] = { "تصفية2" ,  "",  "",  "",  "",  "" }, 
    ["qual2pref"] = { "سابقة تصفية2" ,  "",  "",  "",  "",  "" }, 
    ["qual3"] = { "تصفية3" ,  "",  "",  "",  "",  "" }, 
    ["qual3pref"] = { "سابقة تصفية3" ,  "",  "",  "",  "",  "" }, 
    ["qual4"] = { "تصفية4" ,  "",  "",  "",  "",  "" }, 
    ["qual4pref"] = { "سابقة تصفية4" ,  "",  "",  "",  "",  "" }, 
    ["qual5"] = { "تصفية5" ,  "",  "",  "",  "",  "" }, 
    ["qual5pref"] = { "سابقة تصفية5" ,  "",  "",  "",  "",  "" }, 
    ["sortbytime"] = { "ترتيب" ,  "",  "",  "",  "",  "" }, 
    ["option1"] = { "خيار" ,  "",  "",  "",  "",  "" }, 
    ["option1value"] = { "قيمة خيار" ,  "",  "",  "",  "",  "" }, 
    ["propertyimage"] = { "propertyimage" ,  "",  "",  "",  "",  "" }, 
    ["property2"] = { "property2" ,  "",  "",  "",  "",  "" }, 
    ["qualifierprefix"] = { "بادئة تصفيات" ,  "",  "",  "",  "",  "" }, 
    ["qualifiersuffix"] = { "لاحقة  تصفيات" ,  "",  "",  "",  "",  "" }, 
    ["avoidqualifier"] = { "تجاهل تصفية " ,  "",  "",  "",  "",  "" },
    
    ["preferqualifier"] = { "preferqualifier" ,  "",  "",  "",  "",  "" }, 
    ["avoidvalue"] = { "avoidvalue" ,  "",  "",  "",  "",  "" }, 
    ["preferqualifiervalue"] = { "preferqualifiervalue" ,  "",  "",  "",  "",  "" }, 
    
    ["separator"] = { "separator" ,  "",  "",  "",  "",  "" }, 
    ["conjunction"] = { "conjunction" ,  "",  "",  "",  "",  "" }, 
    
    ["link"] = { "وصلة" ,  "",  "",  "",  "",  "" }, 
    ["linkname"] = { "تسمية وصلة" ,  "",  "",  "",  "",  "" }, 
    }
    
function switch_qualls( property , qual1 , Table )
    --local property
    if qual1 and qual1 ~= "" then return qual1 end
    if property:upper():sub(1,1) == "P" then 
        property = property:sub(2) 
        property = tonumber(property)
    end
    local val = Table[property] or ""
    
    return val
end

function switch_contry( property , argvalue , property2 , Table )
    --local property
    if argvalue and argvalue ~= "" then return argvalue end
    if property:upper():sub(1,1) then 
        property = property:sub(2) 
        property = tonumber(property)
    end
    for i, v in pairs( Table ) do
        if v == property
            then 
                return property2
        end
    end
    
    return argvalue
end

local function isavild(x)
    if x and x ~= "" then return x end
    return nil
end

function p.prase( frame )
    --local prgs = frame.args
    local prgs = frame:getParent().args
    local args = prgs
    
    local value = mw.text.trim( args["قيمة موجودة"] or args.value or args["1"] or "" )
    if value and value ~= '' then
    	mw.log("value:" .. value )
        if value == 'لا' or value == 'no' then
            return ""
		else
			return value
        end
    end
    
    for k, t in pairs(alies) do
        --mw.log(" arg:" .. k )
        for i, v in pairs(t) do
            if args[v] and v ~= "" then 
                --mw.log( "v arg: v".. v )
                if v ~= k 
                    then 
                        args[k] = args[v]
                        args.k = args[v]
                        --mw.log("rename arg:".. v .. " to : " .. k )
                end
            end
        end
    end
    --If a value if already set, use it
    local property = args.property or args["property"] or args["خاصية"]
    local contries = { 17 , 1532 , 27 , 495 }
    args.property1 = switch_contry( property , args.property1 , "P41" , contries )
    
    args.image = switch_contry( property , args.image , "image" , contries )
    
    args.size = switch_contry( property , args.size , "20" , contries )
    
    args.formatting = switch_contry( property , args.formatting , "sitelink" , { 1811 , 1881 } )
    
    args.bothdates = switch_contry( property , args.bothdates , "true",{26,551,27,69,1376,1532,17,495,102,1451} )
    args.onlyvaluewithref = switch_contry( property , args.onlyvaluewithref , "t" ,{ 172,140,91,1853 } )
    
    args.qual1 = switch_qualls( property , args.qual1 , {
        [856] = "P407" ,  -- لغة الموقع الرسمي
        [159] = "P17" ,  -- بلد مقر رسمي
        [1120] = "P2868" ,  -- خاصية دور شخص
        [1561] = "P2868" ,  -- خاصية دور شخص
        [1132] = "P2868" ,  -- خاصية دور شخص
    } )
    -- firstvalue 
    if isavild( args["وصلة كاملة"] ) or isavild( args.firstvalue ) then
        args.firstvalue = "true"
    end
    
    -- value-module / value-function
    value_module = switch_qualls( property , args["value-module"] , {
        [106] = "Wikidata2/P106" ,
        [413] = "Wikidata2/P106" ,
        [172] = "Wikidata2/P172" ,
    } )
    value_function = switch_qualls( property , args["value-function"] , {
        [106] = "formatEntityWithGenderClaim" ,
        [413] = "formatEntityWithGenderClaim" ,
        [172] = "get_P172_lab" ,
    } )
    if isavild( value_module ) and isavild( value_function ) then
		args["value-module"] = value_module
		args["value-function"] = value_function
	end
        
    -- rank 
    if isavild( args.rank ) == nil then
        if isavild(args["رقم"]) or isavild( args.link ) then
            args.rank = "all"
        else
            args.rank = "best"
        end
    end
    
    -- قائمة 
    if isavild(args["قائمة"]) 
        or isavild(args["نقطة"]) 
        or isavild(args["bothdates"]) 
        or isavild(args["فاصل سطر"]) 
        or switch_contry( property , args["قائمة"] , "true" , {26,551,27,69,1376,1532,17,495,102,1451} )
    then 
        args.separator = "{{-}}"
        args.conjunction = "{{-}}"
    else
        args.separator = args.separator or "،  و"
        args.conjunction = args.conjunction or "،  و"
    end
    
    -- قائمة شريطية
    if args.barlist and args.barlist ~= "" then
        args.mainprefix = "{{Div/top}}" .. (args.mainprefix or "")
        args.mainsuffixAfterIcon = ( args.mainsuffixAfterIcon or "" ) .. "</div>"
    end
    
    if args.pattern and args.pattern ~= "" then
        if args.pattern == "وصلة" then args.pattern = "autourl2" end
    else
        if not args["وصلة كاملة"] or args["وصلة كاملة"] == "" then 
            if args.link and args.link ~= "" then 
                args.pattern = "[" .. args.link .. " " .. ( args.linkname or "$1" ) .. "]" 

            end
        end
        
    end
    
    args.addTrackingCat = "yes" 
    args.NosValue = args.NoPropValue
    args.showlang = "t" 
    
    return Wikidata2( args )
end

return p