local QBCore = exports['qb-core']:GetCoreObject()

local hostageAllowedWeapons = {
    "weapon_pistol",
    "weapon_combatpistol",
    "weapon_pistol50",
    "weapon_snspistol",
    "weapon_vintagepistol",
    "vweapon_heavypistol",
    "weapon_revolver",
    "weapon_ceramicpistol",
    "weapon_navyrevolver",
    "weapon_marksmanpistol",
    "weapon_snspistol_mk2",
    "weapon_pistol_mk2",
    "weapon_dp9",
    "weapon_glock",
    "weapon_browning",
    "weapon_machinepistol",
}



if Config.Debug then Load('debug') end
RegisterNetEvent('qb-target:givecash')
AddEventHandler('qb-target:givecash', function(playerid)
	
	local keyboard = exports['qb-keyboard']:KeyboardInput({
		header = "Giv penge", 
		rows = {
			{
				id = 0, 
				txt = "Indtast beløb, du har: "..QBCore.Functions.GetPlayerData().money.cash.. ",-"
			},
		}
	})
	if keyboard ~= nil then
		if keyboard[1].input == nil then QBCore.Functions.Notify("error", "error", 3500) return end
		if tonumber(keyboard[1].input) > 0 then 
			amount = tonumber(keyboard[1].input)
			TriggerServerEvent('qb-target:server:givemoneytoanuotherplayer', amount, playerid)
		else
			QBCore.Functions.Notify("Nummeret er mindre end 0", "error", 3500)
		end
	end
end)

RegisterNetEvent("inventory:client:Giveitemanim")
AddEventHandler("inventory:client:Giveitemanim", function()
	LoadAnimDict("mp_common")
	TaskPlayAnim(GetPlayerPed(-1), "mp_common", "givetake1_a", 3.0, 3.0, -1, 0, 0, false, false, false)
end)

RegisterNetEvent("inventory:client:Reciveitemanim")
AddEventHandler("inventory:client:Reciveitemanim", function()
	Citizen.Wait(600)
	LoadAnimDict("mp_common")
	TaskPlayAnim(GetPlayerPed(-1), "mp_common", "givetake2_a", 3.0, 3.0, -1, 0, 0, false, false, false)
end)

function LoadAnimDict( dict )
    while ( not HasAnimDictLoaded( dict ) ) do
        RequestAnimDict( dict )
        Citizen.Wait( 5 )
    end
end

CreateThread(function()
    exports['qb-target']:AddGlobalPlayer({
        options = {
            ["Politi"] = {
                icon = 'fas fa-fist-raised',
                label = 'Politi handlinger',
                action = function(Enty)
                    local playerid = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty))
                    local hashandcuff = false
                    for k, item in pairs(QBCore.Functions.GetPlayerData().items) do 
                        if item.name == "handcuffs" then
                            hashandcuff = true
                            break
                        end
                    end
                    QBCore.Functions.TriggerCallback('qb-target:GetPlayerInfo', function(PlayerIsCuffed, isDead, isVeryDead, PlayerCitizenId)
                        local playermenu = { 
                            {
                                id = 1,
                                header = "Politi handlinger",
                                isMenuHeader = true,
                                icon = "fas fa-circle",
                            },
                            {
                                id = 2,
                                header = "Fængsel",
                                txt = "Smid i fængsel",
                                icon = "fas fa-user",
                                params = {
                                    event = "police:client:JailPlayer",
                                    args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                    txt = "Smid i fængsel",
                                }
                            },
                            {
                                id = 3,
                                header = "Bøde",
                                txt = "Giv en bøde",
                                icon = "fas fa-file-invoice-dollar",
                                params = {
                                    event = "police:client:BillPlayer",
                                    args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                    txt = "Giv bøde",
                                }
                            },
                            {
                                id = 4,
                                header = "Visiter",
                                txt = "Visiter borgeren",
                                icon = "fas fa-search",
                                params = {
                                    event = "police:client:SearchPlayer",
                                    args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                    txt = "",
                                }
                            },
                        }
                        if PlayerIsCuffed then
                            playermenu[#playermenu+1] = { 
                                header = "Tag maske af",
                                txt = "Tag masken af borgeren",
                                icon = "fas fa-mask",
                                params = {
                                    event = "police:client:takeoffmask",
                                    args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                    txt = "",
                                }
                            }
                        end
    
    
                        if hashandcuff  then
                            playermenu[#playermenu+1] = { 
                                header = "Brug håndjern",
                                -- txt = "Giv håndjern på/Tag håndjern af",
                                icon = "fas fa-handcuffs",
                                params = {
                                    event = "police:client:CuffPlayerSoft",
                                    args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                    txt = "",
                                }
                            }
                        end
                        local vehicle = QBCore.Functions.GetClosestVehicle()
                        if vehicle ~= 0 and vehicle then
                            local ped = PlayerPedId()
                            local pos = GetEntityCoords(ped)
                            local vehpos = GetEntityCoords(vehicle)
                            if #(pos - vehpos) < 5.0 and not IsPedInAnyVehicle(ped) and PlayerIsCuffed or isDead then
                                playermenu[#playermenu+1] = { 
                                    header = "Placer i køretøj",
                                    -- txt = "Put it inside the vehicle",
                                    icon = "fas fa-arrow-right-from-bracket",
                                    params = {
                                        event = "qb-target:client:PutPlayerInVehicle",
                                        args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                        txt = "",
                                    }
                                }
                                playermenu[#playermenu+1] = { 
                                    header = "Tag ud af køretøj",
                                    -- txt = "Put it outside the vehicle",
                                    icon = "fas fa-arrow-right-from-bracket",
                                    params = {
                                        event = "qb-target:client:SetPlayerOutVehicle",
                                        args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                        txt = "",
                                    }
                                }
    
                            end
                        end
                        if PlayerIsCuffed or isDead then
                            playermenu[#playermenu+1] = { 
                                header = "Eskorter",
                                -- txt = "Escort him",
                                icon = "fas fa-user",
                                params = {
                                    event = "police:client:EscortPlayer",
                                    args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                    txt = "",
                                }
                            }
                        end
                        exports[Config.menu]:openMenu(playermenu)
                    end, GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)))
    
                    
                end,
                canInteract = function(Enty, distance, data)
                    if IsPedAPlayer(Enty) and not QBCore.Functions.GetPlayerData().metadata["isdead"] and not QBCore.Functions.GetPlayerData().metadata["inlaststand"] and not IsPedInAnyVehicle(GetPlayerPed(-1), false) then return true end 
                    return false
                end,
                job = 'police',
            },
            ["Ambulance"] = {
                icon = 'fas fa-briefcase-medical',
                label = 'Læge handlinger',
    
                action = function(Enty)
                    local playerid = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty))
                    local bandage = false
                    for k, item in pairs(QBCore.Functions.GetPlayerData().items) do 
                        if item.name == "bandage" then
                            bandage = true
                            break
                        end
                    end
                    local firstaid = false
                    for k, item in pairs(QBCore.Functions.GetPlayerData().items) do 
                        if item.name == "firstaid" then
                            firstaid = true
                            break
                        end
                    end
    
                    QBCore.Functions.TriggerCallback('qb-target:GetPlayerInfo', function(PlayerIsCuffed, isDead, isVeryDead, PlayerCitizenId)
                        local playermenu = { 
                            {
                                id = 1,
                                header = "Læge handlinger",
                                txt = '',
                                isMenuHeader = true,
                                icon = "fas fa-circle",
                            },
                            {
                                id = 2,
                                header = "Kontroller helbred",
                                txt = "",
                                icon = "fas fa-user",
                                params = {
                                    event = "police:client:CheckStatus",
                                    args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                    txt = "",
                                }
                            },
                            {
                                id = 2,
                                header = "Tag blodprøve",
                                txt = "",
                                icon = "fas fa-tint",
                                params = {
                                    event = "qb-target:client:TakeBlood",
                                    args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                    txt = "",
                                }
                            },
                        }
                        if isDead and firstaid then
                            playermenu[#playermenu+1] = { 
                                header = "Genopliv",
                                txt = "",
                                icon = "fas fa-band-aid",
                                params = {
                                    event = "qb-target:client:RevivePlayer",
                                    args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                    txt = "",
                                }
                            }
                        end
                        if not isDead and bandage or firstaid then
                            playermenu[#playermenu+1] = { 
                                id = 3,
                                header = "Behandel sår",
                                txt = "",
                                icon = "fas fa-syringe",
                                params = {
                                    event = "qb-target:client:TreatWounds",
                                    args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                    txt = "",
                                }
                            }
                        end
                        if PlayerIsCuffed or isDead then
                            playermenu[#playermenu+1] = { 
                                header = "Eskorter",
                                txt = "",
                                icon = "fas fa-user",
                                params = {
                                    event = "police:client:EscortPlayer",
                                    args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                    txt = "",
                                }
                            }
                        end
                        if isDead and exports['qb-ambulancejob']:NearSomehing()  then
                            playermenu[#playermenu+1] = { 
                                header = "Læg på båre",
                                txt = "",
                                icon = "fas fa-user",
                                params = {
                                    isServer = true,
                                    event = "hospital:server:LayOnStretcher",
                                    args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                    txt = "",
                                }
                            }
                        end
                        -- and exports['qb-ambulancejob']:NearSomehing()
                        
                        local vehicle = QBCore.Functions.GetClosestVehicle()
                        if vehicle ~= 0 and vehicle then
                            local ped = PlayerPedId()
                            local pos = GetEntityCoords(ped)
                            local vehpos = GetEntityCoords(vehicle)
                            if #(pos - vehpos) < 5.0 and not IsPedInAnyVehicle(ped) and PlayerIsCuffed or isDead then
                                playermenu[#playermenu+1] = { 
                                    header = "Placer i køretøj",
                                    txt = "",
                                    icon = "fas fa-arrow-right-from-bracket",
                                    params = {
                                        event = "qb-target:client:PutPlayerInVehicle",
                                        args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                        txt = "",
                                    }
                                }
                                playermenu[#playermenu+1] = { 
                                    header = "Tag ud af køretøj",
                                    txt = "",
                                    icon = "fas fa-arrow-right-from-bracket",
                                    params = {
                                        event = "qb-target:client:SetPlayerOutVehicle",
                                        args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                        txt = "",
                                    }
                                }
    
                            end
                        end
                        exports[Config.menu]:openMenu(playermenu)
                    end, GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)))
    
                    
                end,
                canInteract = function(Enty, distance, data)
                    if IsPedAPlayer(Enty) and not QBCore.Functions.GetPlayerData().metadata["isdead"] and not QBCore.Functions.GetPlayerData().metadata["inlaststand"] and not IsPedInAnyVehicle(GetPlayerPed(-1), false) then
                        return true
                    end 
                    return false
                end,
                job = 'ambulance',
            },
            ["Citizen"] = {
                icon = 'fas fa-id-badge',
                label = 'Handlinger',
                action = function(Enty)
                    local hashandcuff = false
                    local HasHeadBag = false
                    for k, item in pairs(QBCore.Functions.GetPlayerData().items) do 
                        if item.name == "handcuffs"  then
                            hashandcuff = true
                            break
                        end
                    end
                    for k, item in pairs(QBCore.Functions.GetPlayerData().items) do 
                        if item.name == "headbag"  then
                            HasHeadBag = true
                            break
                        end
                    end
                    QBCore.Functions.TriggerCallback('qb-target:GetPlayerInfo', function(PlayerIsCuffed, isDead, isVeryDead, PlayerCitizenId)
                        local playermenu = { 
                                {
                                header = "Giv telefonnummer",
                                txt = "",
                                icon = "fas fa-phone",
                                params = {
                                    event = "qb-phone:client:GiveContactDetails",
                                    args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                    txt = "",
                                }
                            },
                            {
                                header = "Giv kontanter",
                                txt = "Du har: "..QBCore.Functions.GetPlayerData().money.cash.. ',-',
                                icon = "fas fa-dollar-sign",
                                params = {
                                    event = 'qb-target:givecash',
                                    args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                    txt = "",
                                }
                            },
                            {
                                header = "Giv nøgler",
                                txt = "",
                                icon = "fas fa-key",
                                params = {
                                    event = "vehiclekeys:client:GiveKeys2",
                                    args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                    txt = "",
                                }
                            },
                            {
                                header = "Stjæl sko",
                                txt = "",
                                icon = "fas fa-socks",
                                params = {
                                    event = "shoestealing:client:stealshoes",
                                    args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                    txt = "",
                                }
                            },
                            {
                                header = "Bær",
                                txt = "",
                                icon = "fas fa-people-carry",
                                params = {
                                    event = "qb-target:carry:command",
                                    args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                    txt = "",
                                }
                            },
                        }
                        if exports['qb-headbag']:GetisHeadBagged(PlayerCitizenId) then
                            playermenu[#playermenu+1] = { 
                                header = "Fjern pose",
                                txt = "Fjern posen fra hoved",
                                icon = "fas fa-mask",
                                params = {
                                    event = "qb-headbag:server:BagOff",
                                    isServer = true,
                                    args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                    txt = "",
                                }
                            }
                        end
                        if HasHeadBag and PlayerIsCuffed or isDead then
                            if not exports['qb-headbag']:GetisHeadBagged(PlayerCitizenId) then
                                playermenu[#playermenu+1] = { 
                                    header = "Brug hovedet",
                                    txt = "Giv personen en pose på hovedet",
                                    icon = "fas fa-mask",
                                    params = {
                                        event = "qb-target:puton",
                                        args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                        txt = "",
                                    }
                                }
                            end
                        end
                        if hashandcuff  then
                            playermenu[#playermenu+1] = { 
                                header = "Håndjern",
                                txt = "",
                                icon = "fas fa-handcuffs",
                                params = {
                                    event = "qb-target:client:CuffPlayerSoft",
                                    args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                    txt = "",
                                }
                            }
                        end
                        local vehicle = QBCore.Functions.GetClosestVehicle()
                        if vehicle ~= 0 and vehicle then
                            local ped = PlayerPedId()
                            local pos = GetEntityCoords(ped)
                            local vehpos = GetEntityCoords(vehicle)
                            if #(pos - vehpos) < 5.0 and not IsPedInAnyVehicle(ped) and PlayerIsCuffed or isDead then
                                playermenu[#playermenu+1] = { 
                                    header = "Placer i køretøj",
                                    txt = "",
                                    icon = "fas fa-arrow-right-from-bracket",
                                    params = {
                                        event = "qb-target:client:PutPlayerInVehicle",
                                        args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                        txt = "",
                                    }
                                }
                                playermenu[#playermenu+1] = { 
                                    header = "Tag ud af køretøj",
                                    txt = "",
                                    icon = "fas fa-arrow-right-from-bracket",
                                    params = {
                                        event = "qb-target:client:SetPlayerOutVehicle",
                                        args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                        txt = "",
                                    }
                                }
    
                            end
                        end
                        if PlayerIsCuffed or isDead then
                            playermenu[#playermenu+1] = { 
                                header = "Eskorter",
                                txt = "",
                                icon = "fas fa-user",
                                params = {
                                    event = "police:client:EscortPlayer",
                                    args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                    txt = "",
                                }
                            }
                        end
    
    
                        if  QBCore.Functions.GetPlayerData().job.name == 'mechanic' or QBCore.Functions.GetPlayerData().job.name == 'hayesauto' or QBCore.Functions.GetPlayerData().job.name == 'ottos' then
                            playermenu[#playermenu+1] = { 
                                header = "Opret faktura",
                                txt = "",
                                icon = "fas fa-file-invoice-dollar",
                                params = {
                                    event = "qb-phone:client:sendbail",
                                    args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                    txt = "",
                                },
                            }
                        end
    
                        if isVeryDead or IsEntityPlayingAnim(GetPlayerPed(GetPlayerFromServerId(GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)))), "missminuteman_1ig_2", "handsup_base", 3) or IsEntityPlayingAnim(GetPlayerPed(GetPlayerFromServerId(GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)))), "mp_arresting", "idle", 3) then
                            playermenu[#playermenu+1] = { 
                                header = "Berøv",
                                txt = "Berøv borgeren",
                                icon = "fas fa-people-robbery",
                                params = {
                                    event = "qb-target:client:RobPlayer",
                                    args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                    txt = "",
                                }
                            }
                        end
                        if isVeryDead  then
                            playermenu[#playermenu+1] = { 
                                header = "Træk",
                                txt = "",
                                icon = "fas fa-people-robbery",
                                params = {
                                    event = "qb-DragPeople:START",
                                    args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                    txt = "",
                                }
                            }
                        end
                        for i=1, #hostageAllowedWeapons do
                            if HasPedGotWeapon(GetPlayerPed(-1), GetHashKey(hostageAllowedWeapons[i]), false) then
                                foundWeapon = GetHashKey(hostageAllowedWeapons[i])
                                playermenu[#playermenu+1] = { 
                                    header = "Tag gidsel",
                                    txt = "",
                                    icon = "fas fa-gun",
                                    params = {
                                        event = "qb-target:client:TakeHostage",
                                        args = GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)),
                                        txt = "",
                                    }
                                }
                                NoWeapon = false
                                break
                            end
                        end
    
                        exports[Config.menu]:openMenu(playermenu)
                    end, GetPlayerServerId(NetworkGetPlayerIndexFromPed(Enty)))
                end,
                canInteract = function(Enty, distance, data)
                if IsPedAPlayer(Enty) and not QBCore.Functions.GetPlayerData().metadata["isdead"] and not QBCore.Functions.GetPlayerData().metadata["inlaststand"] and not IsPedInAnyVehicle(GetPlayerPed(-1), false) then
                    return true
                end 
                return false
                end,
            },
        },
        distance = 1.5, 
        })
    end)