<?php
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization');

// Tratar preflight requests
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit();
}

error_reporting(E_ALL);
ini_set('display_errors', 1);

// Configurações do banco
$servername = "localhost";
$username = "pinheir3_admin";
$password = "080880Gelboy";
$dbname = "pinheir3_controle_frotasV1.1";

try {
    // Conectar ao banco
    $pdo = new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    // Detectar método HTTP
    $method = $_SERVER['REQUEST_METHOD'];
    $acao = $_GET['acao'] ?? '';
    
    switch ($method) {
        case 'GET':
            handleGet($pdo, $acao);
            break;
            
        case 'POST':
            handlePost($pdo);
            break;
            
        default:
            http_response_code(405);
            echo json_encode([
                'success' => false,
                'message' => 'Método não permitido',
                'method' => $method
            ]);
            break;
    }
    
} catch (Exception $e) {
    http_response_code(500);
    echo json_encode([
        'success' => false,
        'message' => 'Erro interno do servidor',
        'error' => $e->getMessage(),
        'file' => $e->getFile(),
        'line' => $e->getLine()
    ]);
}

// ==========================================
// 📋 FUNÇÃO GET - LISTAR CHECKLISTS
// ==========================================
function handleGet($pdo, $acao) {
    if ($acao !== 'checklist_veiculo') {
        echo json_encode([
            'success' => false,
            'message' => 'Ação não reconhecida',
            'acao_recebida' => $acao,
            'acoes_validas' => ['checklist_veiculo']
        ]);
        return;
    }
    
    // Filtros opcionais
    $tipo = $_GET['tipo'] ?? null; // CARRO ou MOTO
    $veiculo_id = $_GET['veiculo_id'] ?? null;
    $viagem_id = $_GET['viagem_id'] ?? null;
    $limit = (int)($_GET['limit'] ?? 50);
    
    // Construir query base
    $sql = "SELECT 
                id, viagem_id, veiculo_id, tipo_veiculo,
                data_hora, itens_json, observacoes_gerais, 
                sincronizado, created_at, updated_at
            FROM checklist_veiculo 
            WHERE 1=1";
    
    $params = [];
    
    // Adicionar filtros
    if ($tipo) {
        $sql .= " AND tipo_veiculo = :tipo";
        $params[':tipo'] = strtoupper($tipo);
    }
    
    if ($veiculo_id) {
        $sql .= " AND veiculo_id = :veiculo_id";
        $params[':veiculo_id'] = $veiculo_id;
    }
    
    if ($viagem_id) {
        $sql .= " AND viagem_id = :viagem_id";
        $params[':viagem_id'] = $viagem_id;
    }
    
    // Ordenar e limitar
    $sql .= " ORDER BY data_hora DESC LIMIT :limit";
    $params[':limit'] = $limit;
    
    $stmt = $pdo->prepare($sql);
    
    // Bind dos parâmetros
    foreach ($params as $key => $value) {
        if ($key === ':limit') {
            $stmt->bindValue($key, $value, PDO::PARAM_INT);
        } else {
            $stmt->bindValue($key, $value);
        }
    }
    
    $stmt->execute();
    $checklists = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    // Processar dados
    foreach ($checklists as &$checklist) {
        // Decodificar JSON dos itens
        if ($checklist['itens_json']) {
            $checklist['itens'] = json_decode($checklist['itens_json'], true);
        }
        
        // Buscar fotos relacionadas
        $checklist['fotos'] = buscarFotos($pdo, $checklist['id']);
        
        // Converter sincronizado para boolean
        $checklist['sincronizado'] = (bool)$checklist['sincronizado'];
    }
    
    echo json_encode([
        'success' => true,
        'message' => 'Checklists recuperados com sucesso',
        'data' => $checklists,
        'total' => count($checklists),
        'filtros' => [
            'tipo' => $tipo,
            'veiculo_id' => $veiculo_id,
            'viagem_id' => $viagem_id,
            'limit' => $limit
        ]
    ], JSON_PRETTY_PRINT);
}

// ==========================================
// 💾 FUNÇÃO POST - INSERIR CHECKLIST
// ==========================================
function handlePost($pdo) {
    // Ler dados JSON do body
    $input = file_get_contents('php://input');
    $data = json_decode($input, true);
    
    if (!$data) {
        http_response_code(400);
        echo json_encode([
            'success' => false,
            'message' => 'Dados JSON inválidos',
            'input_recebido' => $input
        ]);
        return;
    }
    
    // Validar campos obrigatórios
    $required = ['viagem_id', 'veiculo_id', 'tipo_veiculo', 'itens_json'];
    foreach ($required as $field) {
        if (!isset($data[$field]) || empty($data[$field])) {
            http_response_code(400);
            echo json_encode([
                'success' => false,
                'message' => "Campo obrigatório ausente: $field",
                'campos_obrigatorios' => $required,
                'dados_recebidos' => array_keys($data)
            ]);
            return;
        }
    }
    
    // ==========================================
    // 🔧 BUSCAR TIPO CORRETO DO VEÍCULO
    // ==========================================
    // IGNORAR o tipo enviado pelo app e buscar o correto do banco
    $stmt_veiculo = $pdo->prepare("SELECT tipo FROM veiculos WHERE id = ?");
    $stmt_veiculo->execute([$data['veiculo_id']]);
    $veiculo_info = $stmt_veiculo->fetch(PDO::FETCH_ASSOC);
    
    if (!$veiculo_info) {
        http_response_code(400);
        echo json_encode([
            'success' => false,
            'message' => 'Veículo não encontrado',
            'veiculo_id' => $data['veiculo_id']
        ]);
        return;
    }
    
    // Usar o tipo CORRETO do banco, não o enviado pelo app
    $tipo_veiculo = strtoupper($veiculo_info['tipo']);
    
    // Log da correção se houve diferença
    $tipo_enviado = strtoupper($data['tipo_veiculo']);
    if ($tipo_enviado !== $tipo_veiculo) {
        error_log("🔧 CORREÇÃO AUTOMÁTICA: App enviou '$tipo_enviado' mas veículo {$data['veiculo_id']} é '$tipo_veiculo'");
    }
    
    try {
        $pdo->beginTransaction();
        
        // Preparar dados para inserção
        $itens_json = is_string($data['itens_json']) ? $data['itens_json'] : json_encode($data['itens_json']);
        
        // Inserir checklist
        $sql = "INSERT INTO checklist_veiculo 
                (viagem_id, veiculo_id, tipo_veiculo, data_hora, itens_json, observacoes_gerais, sincronizado, created_at, updated_at) 
                VALUES (:viagem_id, :veiculo_id, :tipo_veiculo, :data_hora, :itens_json, :observacoes_gerais, :sincronizado, NOW(), NOW())";
        
        $stmt = $pdo->prepare($sql);
        $stmt->execute([
            ':viagem_id' => $data['viagem_id'],
            ':veiculo_id' => $data['veiculo_id'],
            ':tipo_veiculo' => $tipo_veiculo,
            ':data_hora' => $data['data_hora'] ?? date('Y-m-d H:i:s'),
            ':itens_json' => $itens_json,
            ':observacoes_gerais' => $data['observacoes_gerais'] ?? '',
            ':sincronizado' => isset($data['sincronizado']) ? (int)$data['sincronizado'] : 1
        ]);
        
        $checklist_id = $pdo->lastInsertId();
        
        // Processar fotos se houver
        if (isset($data['fotos']) && is_array($data['fotos'])) {
            foreach ($data['fotos'] as $foto) {
                inserirFoto($pdo, $checklist_id, $foto);
            }
        }
        
        $pdo->commit();
        
        // Retornar sucesso
        echo json_encode([
            'success' => true,
            'message' => 'Checklist inserido com sucesso',
            'checklist_id' => (int)$checklist_id,
            'tipo_veiculo' => $tipo_veiculo,
            'total_fotos' => isset($data['fotos']) ? count($data['fotos']) : 0,
            'data_hora' => $data['data_hora'] ?? date('Y-m-d H:i:s')
        ], JSON_PRETTY_PRINT);
        
    } catch (Exception $e) {
        $pdo->rollBack();
        
        http_response_code(500);
        echo json_encode([
            'success' => false,
            'message' => 'Erro ao inserir checklist',
            'error' => $e->getMessage(),
            'dados_enviados' => $data
        ]);
    }
}

// ==========================================
// 📸 FUNÇÃO AUXILIAR - BUSCAR FOTOS
// ==========================================
function buscarFotos($pdo, $checklist_id) {
    $sql = "SELECT id, item_id, nome_arquivo, caminho_arquivo, descricao_problema, 
                   tamanho_arquivo, tipo_mime, created_at 
            FROM checklist_fotos 
            WHERE checklist_id = :checklist_id 
            ORDER BY created_at ASC";
    
    $stmt = $pdo->prepare($sql);
    $stmt->execute([':checklist_id' => $checklist_id]);
    
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
}

// ==========================================
// 📸 FUNÇÃO AUXILIAR - INSERIR FOTO
// ==========================================
function inserirFoto($pdo, $checklist_id, $foto) {
    if (!isset($foto['item_id']) || !isset($foto['nome_arquivo'])) {
        return false;
    }
    
    $sql = "INSERT INTO checklist_fotos 
            (checklist_id, item_id, nome_arquivo, caminho_arquivo, descricao_problema, tamanho_arquivo, tipo_mime, created_at, updated_at)
            VALUES (:checklist_id, :item_id, :nome_arquivo, :caminho_arquivo, :descricao_problema, :tamanho_arquivo, :tipo_mime, NOW(), NOW())";
    
    $stmt = $pdo->prepare($sql);
    return $stmt->execute([
        ':checklist_id' => $checklist_id,
        ':item_id' => $foto['item_id'],
        ':nome_arquivo' => $foto['nome_arquivo'],
        ':caminho_arquivo' => $foto['caminho_arquivo'] ?? '',
        ':descricao_problema' => $foto['descricao_problema'] ?? '',
        ':tamanho_arquivo' => $foto['tamanho_arquivo'] ?? 0,
        ':tipo_mime' => $foto['tipo_mime'] ?? 'image/jpeg'
    ]);
}

?> 
