<?php
/**
 * ajax/frota_salvar.php
 * Salva dados do módulo de frota via AJAX
 */
header('Content-Type: application/json; charset=utf-8');
error_reporting(E_ALL);
ini_set('display_errors', 0);

require_once __DIR__ . '/../functions.php';
require_once __DIR__ . '/../auth.php';

if (!usuarioLogado()) {
    http_response_code(401);
    echo json_encode(['ok' => false, 'erro' => 'Não autorizado']);
    exit;
}

$usuario = usuarioLogado();
$acao = $_POST['acao'] ?? '';

try {
    // ═══════════ ABASTECIMENTO ═══════════
    if ($acao === 'abastecimento') {
        $veiculoId = (int)($_POST['veiculo_id'] ?? 0);
        $data = $_POST['data'] ?? date('Y-m-d');
        $kmAtual = (int)($_POST['km_atual'] ?? 0);
        $litros = (float)($_POST['litros'] ?? 0);
        $valorTotal = (float)($_POST['valor_total'] ?? 0);
        $observacoes = trim($_POST['observacoes'] ?? '');
        
        // Validações
        if ($veiculoId <= 0) {
            throw new Exception('Veículo inválido. ID: ' . $veiculoId);
        }
        if ($kmAtual <= 0) {
            throw new Exception('KM atual é obrigatório');
        }
        if ($litros <= 0) {
            throw new Exception('Quantidade de litros é obrigatória');
        }
        if ($valorTotal <= 0) {
            throw new Exception('Valor total é obrigatório');
        }
        
        // Verificar permissão
        if ($usuario['perfil'] !== 'ADMIN') {
            $stmtCheck = pdo()->prepare("SELECT id FROM frota_veiculos WHERE id = ? AND responsavel_id = ?");
            $stmtCheck->execute([$veiculoId, $usuario['id']]);
            if (!$stmtCheck->fetch()) {
                throw new Exception('Você não tem permissão para este veículo');
            }
        }
        
        // Upload de foto
        $fotoUrl = null;
        if (!empty($_FILES['foto']['tmp_name']) && $_FILES['foto']['error'] === UPLOAD_ERR_OK) {
            $dir = __DIR__ . '/../uploads/frota/';
            if (!is_dir($dir)) {
                mkdir($dir, 0755, true);
            }
            
            $ext = strtolower(pathinfo($_FILES['foto']['name'], PATHINFO_EXTENSION));
            if (!in_array($ext, ['jpg','jpeg','png','webp'])) {
                throw new Exception('Formato de imagem inválido. Use JPG, PNG ou WEBP');
            }
            if ($_FILES['foto']['size'] > 5 * 1024 * 1024) {
                throw new Exception('Imagem muito grande. Máximo 5MB');
            }
            
            $nome = 'abast_' . $veiculoId . '_' . date('YmdHis') . '_' . mt_rand(100,999) . '.' . $ext;
            if (move_uploaded_file($_FILES['foto']['tmp_name'], $dir . $nome)) {
                $fotoUrl = 'uploads/frota/' . $nome;
            }
        }
        
        // Salvar abastecimento
        $sql = "INSERT INTO frota_abastecimentos (veiculo_id, data, km_atual, litros, valor_total, foto_url, observacoes) VALUES (?, ?, ?, ?, ?, ?, ?)";
        $stmt = pdo()->prepare($sql);
        $stmt->execute([$veiculoId, $data, $kmAtual, $litros, $valorTotal, $fotoUrl, $observacoes]);
        
        // Atualizar KM do veículo se for maior
        $stmtKm = pdo()->prepare("UPDATE frota_veiculos SET km_atual = ? WHERE id = ? AND km_atual < ?");
        $stmtKm->execute([$kmAtual, $veiculoId, $kmAtual]);
        
        echo json_encode(['ok' => true, 'mensagem' => 'Abastecimento registrado com sucesso!']);
        exit;
    }
    
    // ═══════════ MANUTENÇÃO ═══════════
    if ($acao === 'manutencao') {
        $veiculoId = (int)($_POST['veiculo_id'] ?? 0);
        $tipo = $_POST['tipo'] ?? '';
        $data = $_POST['data'] ?? date('Y-m-d');
        $kmAtual = (int)($_POST['km_atual'] ?? 0);
        $proximaKm = !empty($_POST['proxima_km']) ? (int)$_POST['proxima_km'] : null;
        $proximaData = !empty($_POST['proxima_data']) ? $_POST['proxima_data'] : null;
        $descricao = trim($_POST['descricao'] ?? '');
        
        // Validações
        if ($veiculoId <= 0) {
            throw new Exception('Veículo inválido');
        }
        if (empty($tipo)) {
            throw new Exception('Tipo de manutenção é obrigatório');
        }
        if (empty($data)) {
            throw new Exception('Data é obrigatória');
        }
        
        // Verificar permissão
        if ($usuario['perfil'] !== 'ADMIN') {
            $stmtCheck = pdo()->prepare("SELECT id FROM frota_veiculos WHERE id = ? AND responsavel_id = ?");
            $stmtCheck->execute([$veiculoId, $usuario['id']]);
            if (!$stmtCheck->fetch()) {
                throw new Exception('Você não tem permissão para este veículo');
            }
        }
        
        // Upload de foto
        $fotoUrl = null;
        if (!empty($_FILES['foto']['tmp_name']) && $_FILES['foto']['error'] === UPLOAD_ERR_OK) {
            $dir = __DIR__ . '/../uploads/frota/';
            if (!is_dir($dir)) {
                mkdir($dir, 0755, true);
            }
            
            $ext = strtolower(pathinfo($_FILES['foto']['name'], PATHINFO_EXTENSION));
            if (!in_array($ext, ['jpg','jpeg','png','webp'])) {
                throw new Exception('Formato de imagem inválido');
            }
            if ($_FILES['foto']['size'] > 5 * 1024 * 1024) {
                throw new Exception('Imagem muito grande. Máximo 5MB');
            }
            
            $nome = 'manut_' . $veiculoId . '_' . date('YmdHis') . '_' . mt_rand(100,999) . '.' . $ext;
            if (move_uploaded_file($_FILES['foto']['tmp_name'], $dir . $nome)) {
                $fotoUrl = 'uploads/frota/' . $nome;
            }
        }
        
        // Salvar manutenção
        $sql = "INSERT INTO frota_manutencoes (veiculo_id, tipo, data, km_atual, proxima_km, proxima_data, descricao, foto_url) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
        $stmt = pdo()->prepare($sql);
        $stmt->execute([$veiculoId, $tipo, $data, $kmAtual, $proximaKm, $proximaData, $descricao, $fotoUrl]);
        
        echo json_encode(['ok' => true, 'mensagem' => 'Manutenção registrada com sucesso!']);
        exit;
    }
    
    // ═══════════ SALVAR VEÍCULO ═══════════
    if ($acao === 'salvar_veiculo') {
        if ($usuario['perfil'] !== 'ADMIN') {
            throw new Exception('Apenas administradores podem cadastrar veículos');
        }
        
        $id = (int)($_POST['id'] ?? 0);
        $placa = strtoupper(trim($_POST['placa'] ?? ''));
        $modelo = trim($_POST['modelo'] ?? '');
        $ano = (int)($_POST['ano'] ?? 0);
        $kmAtual = (int)($_POST['km_atual'] ?? 0);
        $responsavelId = !empty($_POST['responsavel_id']) ? (int)$_POST['responsavel_id'] : null;
        
        if (empty($placa)) {
            throw new Exception('Placa é obrigatória');
        }
        
        // Verificar placa duplicada
        $stmtDup = pdo()->prepare("SELECT id FROM frota_veiculos WHERE placa = ? AND id != ?");
        $stmtDup->execute([$placa, $id]);
        if ($stmtDup->fetch()) {
            throw new Exception('Já existe um veículo com esta placa');
        }
        
        if ($id > 0) {
            $stmt = pdo()->prepare("UPDATE frota_veiculos SET placa=?, modelo=?, ano=?, km_atual=?, responsavel_id=? WHERE id=?");
            $stmt->execute([$placa, $modelo, $ano, $kmAtual, $responsavelId, $id]);
        } else {
            $stmt = pdo()->prepare("INSERT INTO frota_veiculos (placa, modelo, ano, km_atual, responsavel_id) VALUES (?, ?, ?, ?, ?)");
            $stmt->execute([$placa, $modelo, $ano, $kmAtual, $responsavelId]);
            $id = (int)pdo()->lastInsertId();
        }
        
        echo json_encode(['ok' => true, 'mensagem' => 'Veículo salvo com sucesso!', 'id' => $id]);
        exit;
    }
    
    // ═══════════ EXCLUIR ═══════════
    if ($acao === 'excluir') {
        if ($usuario['perfil'] !== 'ADMIN') {
            throw new Exception('Apenas administradores');
        }
        
        $tipo = $_POST['tipo_registro'] ?? '';
        $id = (int)($_POST['id'] ?? 0);
        
        if ($id <= 0) {
            throw new Exception('ID inválido');
        }
        
        if ($tipo === 'abastecimento') {
            pdo()->prepare("DELETE FROM frota_abastecimentos WHERE id = ?")->execute([$id]);
        } elseif ($tipo === 'manutencao') {
            pdo()->prepare("DELETE FROM frota_manutencoes WHERE id = ?")->execute([$id]);
        } elseif ($tipo === 'veiculo') {
            pdo()->prepare("UPDATE frota_veiculos SET ativo = 0 WHERE id = ?")->execute([$id]);
        } else {
            throw new Exception('Tipo inválido: ' . $tipo);
        }
        
        echo json_encode(['ok' => true, 'mensagem' => 'Registro excluído']);
        exit;
    }
    
    throw new Exception('Ação inválida: ' . $acao);
    
} catch (PDOException $e) {
    http_response_code(500);
    echo json_encode([
        'ok' => false, 
        'erro' => 'Erro no banco de dados: ' . $e->getMessage()
    ]);
} catch (Exception $e) {
    http_response_code(400);
    echo json_encode([
        'ok' => false, 
        'erro' => $e->getMessage()
    ]);
}