-- ====================================================================================
-- TUM.MISSION - HANDLES THE F10 MENU DISPLAYED DURING A MISSION
-- ====================================================================================
-- ====================================================================================

TUM.missionMenu = {}

do
    local function doCommandAbortMission()
        TUM.mission.endMission(TUM.mission.endCause.ABORTED)
    end

    local function doCommandMissionStatus()
        TUM.radio.playForCoalition(TUM.settings.getPlayerCoalition(), "playerCommandMissionStatus", nil, TUM.mission.getPlayerCallsign(), false)
        TUM.mission.playMissionSummaryRadioMessage(false, true)
    end

    local function doCommandNearestAirbase()
        TUM.radio.playForCoalition(TUM.settings.getPlayerCoalition(), "playerATCRequireNearestAirbase", nil, TUM.mission.getPlayerCallsign(), false)
        TUM.atc.requestNavAssistanceToAirbase(true)
    end

    local function doCommandObjectiveLocation(index)
        local obj = TUM.objectives.getObjective(index)
        if not obj then return end

        TUM.radio.playForCoalition(TUM.settings.getPlayerCoalition(), "playerCommandRequireObjectives", { obj.name }, TUM.mission.getPlayerCallsign(), false)
        TUM.atc.requestNavAssistanceToObjective(index, true)
    end

    local function doCommandWeatherUpdate()
        TUM.radio.playForCoalition(TUM.settings.getPlayerCoalition(), "playerATCWeatherUpdate", nil, TUM.mission.getPlayerCallsign(), false)
        TUM.atc.requestWeatherUpdate(true)
    end

    function TUM.missionMenu.create()
        local rootMenu = TUM.getOrCreateRootMenu(true) -- Clear the menu
        missionCommands.addCommand("☱ Mission status", rootMenu, doCommandMissionStatus, nil)

        local objectivesMenuRoot = missionCommands.addSubMenu("❖ Objectives", rootMenu)

        local navigationMenuRoot = missionCommands.addSubMenu("➽ Navigation", rootMenu)
        missionCommands.addCommand("Nav to nearest airbase", navigationMenuRoot, doCommandNearestAirbase, nil)
        for i=1,TUM.objectives.getCount() do
            local obj = TUM.objectives.getObjective(i)
            if obj then
                local objNameAndDescription = obj.name.." ("..Library.tasks[obj.taskID].description.short..")"
                local objRoot = missionCommands.addSubMenu("Objective "..objNameAndDescription, objectivesMenuRoot)
                TUM.supportJTAC.setupJTACOnObjective(i, objRoot)

                missionCommands.addCommand("Nav to objective "..objNameAndDescription, navigationMenuRoot, doCommandObjectiveLocation, i)
            end
        end
        missionCommands.addCommand("Weather update", navigationMenuRoot, doCommandWeatherUpdate, nil)

        TUM.wingmenMenu.create()
        TUM.supportAWACS.createMenu()

        if not TUM.settings.getValue(TUM.settings.id.MULTIPLAYER) then -- If not multiplayer, add "show mission score" command
            missionCommands.addCommand("★ Display mission score", rootMenu, TUM.playerScore.showScore, nil)
        end

        local abortRoot = missionCommands.addSubMenu("⬣ Abort mission", rootMenu)
        if not TUM.settings.getValue(TUM.settings.id.MULTIPLAYER) and DCSEx.io.canReadAndWrite() then
            missionCommands.addCommand("✓ Confirm (all xp since last landing will be lost!)", abortRoot, doCommandAbortMission, nil)
        else
            missionCommands.addCommand("✓ Confirm", abortRoot, doCommandAbortMission, nil)
        end
        missionCommands.addCommand("✕ Cancel", abortRoot, DCSEx.dcs.doNothing, nil)

        TUM.debugMenu.createMenu() -- Append debug menu to other menus (if debug mode enabled)
    end
end
