RadialVehicleSwitcher = RadialVehicleSwitcher or {}

function RadialVehicleSwitcher:initAI()
    -- print("--> [RVS AI] Модуль загружен. Режим: Единая задача полевой работы")
end

function RadialVehicleSwitcher:getPlayerPositionAndDirection()
    local node = nil
    if g_currentMission.controlledVehicle ~= nil then
        node = g_currentMission.controlledVehicle.rootNode
    elseif g_localPlayer ~= nil and g_localPlayer.rootNode ~= nil and g_localPlayer.rootNode ~= 0 then
        node = g_localPlayer.rootNode
    end
    
    if node ~= nil then
        local x, _, z = getWorldTranslation(node)
        local dx, _, dz = localDirectionToWorld(node, 0, 0, 1)
        local rotY = MathUtil.getYRotationFromDirection(dx, dz)
        return x, z, rotY, node
    end
    return nil, nil, nil, nil
end

-- ==============================================================================
-- ИСПРАВЛЕННАЯ ПРОВЕРКА (как в твоём оригинале)
-- ==============================================================================
function RadialVehicleSwitcher:canVehicleDoJob(vehicle)
    if vehicle == nil then return false end
    -- Просто проверяем, что техника существует и может быть управляема
    -- Оригинальная логика не требовала сложных проверок
    return true
end

-- ==============================================================================
-- Функция создания задания полевой работы
-- ==============================================================================
function RadialVehicleSwitcher:createFieldWorkJob(vehicle, startX, startZ, startAngle)
    if vehicle == nil or g_currentMission.aiJobTypeManager == nil then
        return nil
    end
    
    local farmId = vehicle:getOwnerFarmId() or g_currentMission:getFarmId() or 1
    local rootVehicle = vehicle.getRootVehicle ~= nil and vehicle:getRootVehicle() or vehicle
    
    -- Создаем задание полевой работы (тип 2)
    local job = g_currentMission.aiJobTypeManager:createJob(2)
    if job == nil then
        -- print("--> [RVS AI] ОШИБКА: Не удалось создать задание полевой работы")
        return nil
    end
    
    -- Применяем текущее состояние техники
    if job.applyCurrentState ~= nil then
        job:applyCurrentState(rootVehicle, g_currentMission, farmId, false)  -- false = не на поле
    end
    
    -- Устанавливаем технику
    if job.vehicleParameter ~= nil then
        job.vehicleParameter:setVehicle(rootVehicle)
    end
    
    -- Устанавливаем стартовую позицию
    if job.positionAngleParameter ~= nil then
        job.positionAngleParameter:setPosition(startX, startZ)
        job.positionAngleParameter:setAngle(startAngle)
    end
    
    -- Применяем все настройки
    if job.setValues ~= nil then
        job:setValues()
    end
    
    return job
end

-- ==============================================================================
-- Функция запуска задания
-- ==============================================================================
function RadialVehicleSwitcher:startJob(job, farmId)
    if job == nil then return false end
    
    -- Проверяем валидность задания
    local isValid, errorMsg = true, ""
    if job.validate ~= nil then
        isValid, errorMsg = job:validate(farmId)
    end
    
    if not isValid then
        -- print("--> [RVS AI] ОШИБКА ВАЛИДАЦИИ: " .. tostring(errorMsg))
        return false
    end
    
    -- Отправляем событие на сервер (для мультиплеера)
    if AIJobStartRequestEvent ~= nil and g_client ~= nil then
        local event = AIJobStartRequestEvent.new(job, farmId)
        if event and g_client:getServerConnection() then
            g_client:getServerConnection():sendEvent(event)
            -- print("--> [RVS AI] Задание отправлено на сервер")
            return true
        end
    end
    
    -- Запасной вариант для одиночной игры
    if g_currentMission.aiSystem ~= nil then
        g_currentMission.aiSystem:startJob(job, farmId)
        -- print("--> [RVS AI] Задание запущено через aiSystem")
        return true
    end
    
    return false
end

-- ==============================================================================
-- Функция проверки статуса ИИ
-- ==============================================================================
function RadialVehicleSwitcher:getAIStatus(vehicle)
    if vehicle == nil then return "none" end
    local rootVehicle = vehicle.getRootVehicle ~= nil and vehicle:getRootVehicle() or vehicle
    
    if rootVehicle.getIsAIActive ~= nil and rootVehicle:getIsAIActive() then
        return "active"
    end
    
    return "none"
end

-- ==============================================================================
-- ОСНОВНАЯ КОМАНДА (возвращаем оригинальную рабочую логику)
-- ==============================================================================
function RadialVehicleSwitcher:giveCommandToVehicle(vehicle, commandType)
    if vehicle == nil then return false end
    
    local rootVehicle = vehicle.getRootVehicle ~= nil and vehicle:getRootVehicle() or vehicle
    
    if commandType == "TEST_START" then
        local x, z, rotY, node = self:getPlayerPositionAndDirection()
        
        if x == nil or z == nil then
            -- print("--> [RVS AI] ОШИБКА: Не удалось определить позицию игрока")
            return false
        end
        
        -- Проверяем статус ИИ (оригинальная логика)
        if rootVehicle:getIsAIActive() then
            if rootVehicle.toggleAIVehicle ~= nil then 
                rootVehicle:toggleAIVehicle()
                -- print("--> [RVS AI] Наймит остановлен.")
            end
            return true
        end

        if g_currentMission.aiJobTypeManager ~= nil then
            -- Создаем задание полевой работы
            local jobFieldWork = g_currentMission.aiJobTypeManager:createJob(2)
            
            if jobFieldWork ~= nil then
                -- print(string.format("--> [RVS AI] Создан бланк ПОЛЕВОЙ РАБОТЫ. Точка старта: X:%.1f, Z:%.1f", x, z))
                local farmId = rootVehicle:getOwnerFarmId() or g_currentMission:getFarmId() or 1
                
                -- Применяем состояние (4-й аргумент false = не на поле)
                if jobFieldWork.applyCurrentState ~= nil then
                    jobFieldWork:applyCurrentState(rootVehicle, g_currentMission, farmId, false)
                end
                
                if jobFieldWork.vehicleParameter ~= nil then
                    jobFieldWork.vehicleParameter:setVehicle(rootVehicle)
                end
                
                if jobFieldWork.positionAngleParameter ~= nil then
                    jobFieldWork.positionAngleParameter:setPosition(x, z)
                    jobFieldWork.positionAngleParameter:setAngle(rotY)
                end
                
                if jobFieldWork.setValues ~= nil then
                    jobFieldWork:setValues()
                end
                
                -- Валидация
                local success, errorMessage = false, "validate не найден"
                if jobFieldWork.validate ~= nil then
                    success, errorMessage = jobFieldWork:validate(farmId)
                end
                
                if success then
                    -- print("--> [RVS AI] Идеальный бланк FieldWork готов! Запускаем...")
                    if AIJobStartRequestEvent ~= nil and g_client ~= nil then
                        g_client:getServerConnection():sendEvent(AIJobStartRequestEvent.new(jobFieldWork, farmId))
                        -- print("--> [RVS AI] Трактор выехал на работу!")
                        return true
                    else
                        g_currentMission.aiSystem:startJob(jobFieldWork, farmId)
                        return true
                    end
                else
                    -- print("--> [RVS AI] ОШИБКА ВАЛИДАЦИИ FieldWork: " .. tostring(errorMessage))
                end
            end
        end
    end
    return false
end