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"] = { "سابقة تصفية", "", "", "", "", "" },
    ["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