if AK4Y.Framework == "qb" then
    QBCore = exports['qb-core']:GetCoreObject()
elseif AK4Y.Framework == "oldqb" then 
    QBCore = nil
end

Citizen.CreateThread(function()
    if AK4Y.Framework == "oldqb" then 
        while QBCore == nil do
            TriggerEvent('QBCore:GetObject', function(obj) QBCore = obj end)
            Citizen.Wait(200)
        end
	elseif AK4Y.Framework == "qb" then
		while QBCore == nil do
            Citizen.Wait(200)
        end
    end
	Wait(4000)
	SendNUIMessage({
		type = 'setJs', 
		vehicles = AK4Y.Vehicles,
		categories = AK4Y.Categories,
		helicopters = AK4Y.Helicopters,
		weapons = AK4Y.Weapons,
		items = AK4Y.Items,
		moneys = AK4Y.Money,
		customItems = AK4Y.Customize,
		customPlatePrice = AK4Y.CustomPlatePriceOnBuyVehicle,
		minCharForPhone = AK4Y.MinCharForPhoneNumber,
		minCharForPlate = AK4Y.MinCharForPlate,
		maxCharForPhone = AK4Y.MaxCharForPhoneNumber,
		maxCharForPlate = AK4Y.MaxCharForPlate,
		credits = AK4Y.BuyCredits,
		language = AK4Y.Translate,
	})	
end)

RegisterNetEvent('QBCore:Client:OnPlayerLoaded')
AddEventHandler('QBCore:Client:OnPlayerLoaded', function()
	PlayerData = QBCore.Functions.GetPlayerData()
end)

local openMenuSpamProtect = 0
RegisterCommand(AK4Y.OpenMenuCommand, function()
	if openMenuSpamProtect <= GetGameTimer() then 
		openMenuSpamProtect = GetGameTimer() + 1000
		QBCore.Functions.TriggerCallback("ak4y-donateSystem:getPlayerDetails", function(result)
			SetNuiFocus(true,true)
			SendNUIMessage({
				type = 'openUi', 
				currentCredit = result.playerData.credit,
				firstName = result.charInfo.firstname,
				lastName = result.charInfo.lastname,
				avatar = result.avatar,
			})	
		end)
	else
		AK4Y.ClientNotify(AK4Y.Translate.openSpam, "error")
	end
end)

RegisterKeyMapping(AK4Y.OpenMenuCommand, 'Donations-menu', 'keyboard', 'F10')

local sendInputSpamProtect = 0
RegisterNUICallback('sendInput', function(data, cb)
	if sendInputSpamProtect <= GetGameTimer() then
		sendInputSpamProtect = GetGameTimer() + 2000 
		QBCore.Functions.TriggerCallback("ak4y-donateSystem:sendInput", function(result)
			if result then 	
				cb(result)
			else
				cb(false)
			end
		end, data)
	else
		AK4Y.ClientNotify(AK4Y.Translate.spamNotify, "error")
		cb(false)
	end
end)

local getVehicleSpamProtect = 0
RegisterNUICallback('getVehicle', function(data, cb)
	if getVehicleSpamProtect <= GetGameTimer() then
		getVehicleSpamProtect = GetGameTimer() + 2000
		QBCore.Functions.TriggerCallback("ak4y-donateSystem:getVehicle", function(result)
			if result then 	
				cb(result)
			else
				cb(false)
			end
		end, data)
	else
		AK4Y.ClientNotify(AK4Y.Translate.spamNotify, "error")
		cb(false)
	end
end)

local getWeaponSpamProtect = 0
RegisterNUICallback('getWeapon', function(data, cb)
	if getWeaponSpamProtect <= GetGameTimer() then
		getWeaponSpamProtect = GetGameTimer() + 2000
		QBCore.Functions.TriggerCallback("ak4y-donateSystem:getWeapon", function(result)
			if result then 	
				cb(result)
			else
				cb(false)
			end
		end, data)
	else
		AK4Y.ClientNotify(AK4Y.Translate.spamNotify, "error")
		cb(false)
	end
end)

local getItemSpamProtect = 0
RegisterNUICallback('getItem', function(data, cb)
	if getItemSpamProtect <= GetGameTimer() then
		getItemSpamProtect = GetGameTimer() + 2000
		QBCore.Functions.TriggerCallback("ak4y-donateSystem:getItem", function(result)
			if result then 	
				cb(result)
			else
				cb(false)
			end
		end, data)
	else
		AK4Y.ClientNotify(AK4Y.Translate.spamNotify, "error")
		cb(false)
	end
end)

local getMoneySpamProtect = 0
RegisterNUICallback('getMoney', function(data, cb)
	if getMoneySpamProtect <= GetGameTimer() then
		getMoneySpamProtect = GetGameTimer() + 2000
		QBCore.Functions.TriggerCallback("ak4y-donateSystem:getMoney", function(result)
			if result then 	
				cb(result)
			else
				cb(false)
			end
		end, data)
	else
		AK4Y.ClientNotify(AK4Y.Translate.spamNotify, "error")
		cb(false)
	end	
end)

local getCustomPlate = 0
RegisterNUICallback('getCustomPlate', function(data, cb)
	if getCustomPlate <= GetGameTimer() then
		getCustomPlate = GetGameTimer() + 2000
		if IsPedInAnyVehicle(PlayerPedId(), false) then
			local veh = GetVehiclePedIsIn(PlayerPedId(), false)
			local oldPlate = GetVehicleNumberPlateText(veh)
			QBCore.Functions.TriggerCallback("ak4y-donateSystem:getCustomPlate", function(result)
				if result then 	
					local newPlate = data.input
					SetVehicleNumberPlateText(veh, data.input)
					if AK4Y.GiveAddKeys then 
						AK4Y.GiveAddKeysFunction(newPlate)
					end
					cb(true)
				else
					cb(AK4Y.Translate.errorDuringPurchase)
				end
			end, data, oldPlate)
		else
			cb(AK4Y.Translate.insideVehicle)
		end
	else
		AK4Y.ClientNotify(AK4Y.Translate.spamNotify, "error")
		cb(false)
	end	
end)

local getPrivNumber = 0
RegisterNUICallback('getPrivNumber', function(data, cb)
	if getPrivNumber <= GetGameTimer() then
		getPrivNumber = GetGameTimer() + 2000
		QBCore.Functions.TriggerCallback("ak4y-donateSystem:getPrivNumber", function(result)
			if result then 	
				cb(true)
			else
				cb(AK4Y.Translate.errorDuringPurchase)
			end
		end, data)
	else
		AK4Y.ClientNotify(AK4Y.Translate.spamNotify, "error")
		cb(false)
	end	
end)

RegisterNUICallback('closeMenu', function(data, cb)
	SetNuiFocus(false, false)
end)