--
-- (C) 2017-24 - ntop.org
--
local dirs = ntop.getDirs()
package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path
package.path = dirs.installdir .. "/scripts/lua/modules/pools/?.lua;" ..
                   package.path

if (ntop.isPro()) then
    package.path = dirs.installdir .. "/pro/scripts/lua/modules/?.lua;" ..
                       package.path
    local snmp_utils = require "snmp_utils"
    shaper_utils = require "shaper_utils"
end

require "lua_utils"
local graph_utils = require "graph_utils"
local alert_utils = require "alert_utils"
local page_utils = require("page_utils")

local host_pools_nedge
if ntop.isnEdge() then host_pools_nedge = require "host_pools_nedge" end
local host_pools = require "host_pools"
-- Instantiate host pools
local host_pools_instance = host_pools:create()

local template = require "template_utils"

local have_nedge = ntop.isnEdge()

local pool_id = _GET["pool"]
local page = _GET["page"] or "historical"

if (not ntop.isPro()) then return end

if ifname == "__system__" then
    -- Someone jumped from the users to the quotas in the System interface, redirect to a Network interface (e.g. nf:0)
    local available_interfaces = interface.getIfNames()
    ifname = available_interfaces["0"]
end

interface.select(ifname)
local ifstats = interface.getStats()
local ifId = ifstats.id
local pool_name = host_pools_instance:get_pool_name(pool_id)

if ntop.isnEdge() then
    if _POST["reset_quotas"] ~= nil then
        host_pools_nedge.resetPoolsQuotas(tonumber(pool_id))
    end
end

sendHTTPContentTypeHeader('text/html')

page_utils.print_header_and_set_active_menu_entry(
    page_utils.menu_entries.host_pools)

dofile(dirs.installdir .. "/scripts/lua/inc/menu.lua")

if (pool_id == nil) then
    print(
        "<div class=\"alert alert alert-danger\"><i class='fas fa-exclamation-triangle fa-lg fa-ntopng-warning'></i> " ..
            i18n("pool_details.pool_parameter_missing_message") .. "</div>")
    dofile(dirs.installdir .. "/scripts/lua/inc/footer.lua")
    return
end

local base_url = ntop.getHttpPrefix() .. '/lua/pool_details.lua?pool=' ..
                     pool_id
local page_params = {}

page_params["ifid"] = ifId
page_params["pool"] = pool_id
page_params["page"] = page

local title =
    i18n(ternary(have_nedge, "nedge.user", "pool_details.host_pool")) .. ": " ..
        pool_name

page_utils.print_navbar(title, base_url, {
    {
        active = page == "historical" or not page,
        page_name = "historical",
        label = "<i class='fas fa-lg fa-chart-area'></i>"
    }, {
        hidden = not ntop.isEnterpriseM() or not ntop.isnEdge() or not ifstats or
            pool_id == host_pools_instance.DEFAULT_POOL_ID,
        active = page == "quotas",
        page_name = "quotas",
        label = i18n("quotas")
    }
})

local pools_stats = interface.getHostPoolsStats()
local pool_stats = pools_stats and pools_stats[tonumber(pool_id)]

if (ntop.isEnterpriseM() or ntop.isnEdge()) and pool_id ~=
    host_pools_instance.DEFAULT_POOL_ID and ifstats.inline and
    (page == "quotas") and (pool_stats ~= nil) then
    print(template.gen("modal_confirm_dialog.html", {
        dialog = {
            id = "reset_quotas_dialog",
            action = "$('#reset_quotas_form').submit()",
            title = i18n("host_pools.reset_quotas"),
            message = i18n("host_pools.confirm_reset_pool_quotas",
                           {pool = pool_name}),
            confirm = i18n("host_pools.reset_quotas")
        }
    }))

    print [[<form id="reset_quotas_form" method="POST">
    <input name="csrf" value="]]
    print(ntop.getRandomCSRFValue())
    print [[" type="hidden"/>
    <input name="reset_quotas" value="" type="hidden" />
  </form>]]

    host_pools_nedge.printQuotas(pool_id, nil, page_params)

    print [[
  <button class="btn btn-secondary" data-bs-toggle="modal" data-bs-target="#reset_quotas_dialog" style="float:right;">]]
    print(i18n("host_pools.reset_quotas"))
    print [[</button>]]
    if ntop.isnEdge() then
        local username = host_pools_nedge.poolIdToUsername(pool_id)
        print [[<a href="]]
        print(ntop.getHttpPrefix())
        print [[/lua/pro/nedge/admin/nf_edit_user.lua?page=categories&username=]]
        print(username)
        print [["><button class="btn btn-secondary" type="button" style="float:right; margin-right:1em;">]]
        print(i18n("nedge.edit_quotas"))
        print [[</button></a>]]
    end
    print [[<br/><br/>]]

elseif page == "historical" then
    local source_value_object = {
        pool = tonumber(pool_id),
        ifid = interface.getId()
    }
    graph_utils.drawNewGraphs(source_value_object)
end

dofile(dirs.installdir .. "/scripts/lua/inc/footer.lua")
