local p = {}

function p.main(frame)
    local getArgs = require('Module:Arguments').getArgs
    local args = getArgs(frame)
    return p._main(args)
end

function p._main(args)
    -- إذا لم يتم توفير مدخل في args[1]، لا يتم عرض شيء.
    if not args[1] then
        return ''
    end

    local data = p.makeDisplayData(args)
    return p.renderDisplay(data)
end

function p.makeDisplayData(args)
    local data = {}

    -- النص المعروض يعتمد فقط على args[1]
    data.display = args[1]

    -- الألوان: اللون الافتراضي هو الأزرق
    local colour = args.color and args.color:lower() or 'blue'

    -- الأصناف (Classes)
    data.classes = {}
    table.insert(data.classes, 'btnrequestui') -- إضافة الصنف دائمًا
    table.insert(data.classes, 'mw-ui-button') -- صنف افتراضي

    -- تحديد الصنف بناءً على اللون
    local class = args.class and args.class:lower()
    if not class then
        if colour == 'blue' then
            class = 'mw-ui-progressive'
        elseif colour == 'red' then
            class = 'mw-ui-destructive'
        elseif colour == 'green' then
            class = 'mw-ui-constructive'
        end
    end

    if class then
        table.insert(data.classes, class)
    end

    -- الأنماط (Styles)
    data.style = args.style

    -- جمع جميع الصفات التي تبدأ بـ `data-input-*`
    data.dataAttributes = {}
    for key, value in pairs(args) do
        if type(key) == 'string' and key:match("^data%-input%-") then
            data.dataAttributes[key] = value
        end
    end

    -- إضافة الخصائص الإضافية
    data.dataAttributes['data-pre'] = args[2] or args.pre or ""
    data.dataAttributes['data-title'] = args[3] or args.title or ""
    data.dataAttributes['data-page'] = args[4] or args.page or ""

    return data
end

function p.renderDisplay(data)
    -- إنشاء النص المعروض
    local displaySpan = mw.html.create('span')
    for _, class in ipairs(data.classes or {}) do
        displaySpan:addClass(class)
    end

    displaySpan:css{
        ['background-color'] = data.backgroundColor,
        color = data.color
    }

    if data.style then
        displaySpan:cssText(data.style)
    end

    displaySpan:wikitext(data.display)

    -- إضافة الصفات `data-input-*`
    for key, value in pairs(data.dataAttributes) do
        displaySpan:attr(key, value)
    end

    return tostring(displaySpan)
end

return p