local cbi = require("luci.cbi")
local i18n = require("luci.i18n")
local translate = i18n.translate
local NamedSection = cbi.NamedSection

local function load_version_desc()
    local fs = require("nixio.fs")
    local content = fs.readfile("/usr/lib/lua/luci/view/ua3f/version.htm")
    if content then
        return content
    end
    -- Fallback if file not found
    return [[
        <a href="https://github.com/SunBK201/UA3F" target="_blank">GitHub</a>
        <br>
        Across the Campus we can reach every corner in the world.
    ]]
end

local ua3f = cbi.Map("ua3f", "UA3F", load_version_desc())

local status = require("luci.model.cbi.ua3f.status")
local general = require("luci.model.cbi.ua3f.general")
local rule = require("luci.model.cbi.ua3f.rule")
local mitm = require("luci.model.cbi.ua3f.mitm")
local desync = require("luci.model.cbi.ua3f.desync")
local l3rewrite = require("luci.model.cbi.ua3f.l3rewrite")
local statistics = require("luci.model.cbi.ua3f.statistics")
local log = require("luci.model.cbi.ua3f.log")

function create_sections(map)
    local sections = {}

    -- Status Section
    sections.status = map:section(NamedSection, "enabled", "ua3f", translate("Status"))

    -- General Section with tabs
    sections.general = map:section(NamedSection, "main", "ua3f", translate("General"))
    sections.general:tab("general", translate("Settings"))
    sections.general:tab("rules", translate("Rewrite Rules"))
    sections.general:tab("mitm", translate("MitM Settings"))
    sections.general:tab("desync", translate("Desync Settings"))
    sections.general:tab("l3rewrite", translate("L3 Rewriting"))
    sections.general:tab("statistics", translate("Statistics"))
    sections.general:tab("log", translate("Log"))

    return sections
end

local sections = create_sections(ua3f)

status.add_status_fields(sections.status)
general.add_general_fields(sections.general)
rule.add_rule_fields(sections.general)
mitm.add_mitm_fields(sections.general)
desync.add_desync_fields(sections.general)
l3rewrite.add_l3rewrite_fields(sections.general)
statistics.add_statistics_fields(sections.general)
log.add_log_fields(sections.general)

return ua3f
