local p = {}

-- استدعاء وحدة التحقق من الوسائط غير المعروفة
local check = require('Module:Check for unknown parameters')._check

-- الدالة الرئيسية لإنشاء قالب المراجع
function p.reflist(frame)
    local args = frame:getParent().args

    -- التحقق من الوسائط غير المعروفة
    local tracking = check({
        ['unknown'] = '[[تصنيف:صفحات تستخدم قالب:مراجع مع وسائط غير معروفة|_VALUE_ ]]',
        ['preview'] = 'الصفحة تستخدم [[قالب:مراجع]] مع وسيط غير مُعرّف "_VALUE_"',
        ['ignoreblank'] = 'y',
        '1', 'colwidth', 'group', 'liststyle', 'refs', 'مراجع', 'محاذاة', 'مجموعة', 'ضبط'
    }, args)

    -- إعداد التصنيفات بناءً على المدخلات
    local class = "reflist"
    if args[1] or args.colwidth then
        class = class .. " reflist-columns references-column-width"
    end

    -- إضافة فئات المجموعة
    local groupClass = args.group or args["مجموعة"]
    if groupClass then
        local validGroups = {
            ["arabic-abajed"] = true,
            ["arabic-alfabeth"] = true,
            ["upper-alpha"] = true,
            ["upper-roman"] = true,
            ["lower-alpha"] = true,
            ["lower-greek"] = true,
            ["lower-roman"] = true,
        }
        if validGroups[groupClass] then
            class = class .. " reflist-" .. groupClass
        end
    end

    -- ضبط المحاذاة
    local textAlign = "right"  -- المحاذاة الافتراضية
    local dir = "rtl"          -- الاتجاه الافتراضي
    if args["محاذاة"] and args["محاذاة"] ~= "" then
        local alignment = args["محاذاة"]
        if alignment == "نعم" then
            textAlign = "left"
            dir = "ltr"
        elseif alignment == "يمين" then
            textAlign = "right"
            dir = "rtl"
        end
    end

    -- تطبيق الضبط (إذا كان الوسيط ضبط = نعم)
    if args["ضبط"] == "نعم" then
        textAlign = "justify"
        -- الاحتفاظ بالاتجاه الافتراضي بناءً على اللغة
    end

    -- إعداد الأنماط بناءً على المدخلات
    local style = "text-align: " .. textAlign .. "; list-style-position: inside; direction: " .. dir .. ";"
    if args[1] then
        if tonumber(args[1]) and tonumber(args[1]) > 1 then
            style = style .. " column-width: auto;"
        end
    elseif args.colwidth then
        style = style .. " column-width: " .. args.colwidth .. ";"
    end
    if args.liststyle then
        style = style .. " list-style-type: " .. args.liststyle .. ";"
    end

    -- معالجة جميع المراجع
    local referencesContent = frame:preprocess("<references group=\"" .. (args.group or args["مجموعة"] or "") .. "\" responsive=\"1\" />")

    -- إعداد المحتوى النهائي
    local result = mw.html.create("div")
    result
        :addClass(class)
        :attr("style", style)
        :wikitext(referencesContent)

    -- إرجاع النتيجة مع تتبع الوسائط غير المعروفة
    return tostring(result) .. tracking
end

return p