<?php
/**
 * API de Coletas - InovTracking
 * Versão: 2.1 - Corrigido statusmobile
 * Descrição: Retorna coletas pendentes para o motorista
 */

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

// Incluir conexão
include_once('./classes/conexao.php');

/**
 * Validar token de autenticação
 */
function validarToken($token) {
    $tokenValido = 'ajr123';
    return $token === $tokenValido;
}

/**
 * Retornar erro em JSON
 */
function retornarErro($codigo, $mensagem) {
    echo json_encode([
        'code' => $codigo,
        'message' => $mensagem,
        'success' => false
    ], JSON_UNESCAPED_UNICODE);
    die();
}

/**
 * Sanitizar entrada
 */
function sanitizar($valor) {
    return htmlspecialchars(strip_tags(trim($valor)));
}

// ============================================================================
// VALIDAÇÕES
// ============================================================================

// Verificar se token foi enviado
if (!isset($_GET['token'])) {
    retornarErro('400', 'Token não informado!');
}

// Validar token
if (!validarToken($_GET['token'])) {
    retornarErro('401', 'Token inválido!');
}

// ============================================================================
// PROCESSAR REQUEST
// ============================================================================

try {
    // Obter dados do POST
    $json = file_get_contents("php://input");
    $dados = json_decode($json);
    
    if (!$dados || !is_array($dados) || count($dados) === 0) {
        retornarErro('400', 'Dados inválidos!');
    }
    
    // Extrair dados do primeiro item (conforme estrutura original)
    $item = $dados[0];
    
    $placa = isset($item->placa) ? sanitizar($item->placa) : null;
    $usuario = isset($item->usuario) ? sanitizar($item->usuario) : null;
    $coletasExistentes = isset($item->coletas) ? $item->coletas : '';
    
    // Validar placa
    if (empty($placa)) {
        echo json_encode([
            'success' => true,
            'total' => 0,
            'coletas' => []
        ], JSON_UNESCAPED_UNICODE);
        die();
    }
    
    // ============================================================================
    // CONSTRUIR FILTRO DE COLETAS EXISTENTES
    // ============================================================================
    
    $filtroColetas = "";
    
    if (!empty($coletasExistentes)) {
        // Remove vírgula final se houver
        $coletasExistentes = rtrim($coletasExistentes, ",");
        
        // Construir filtro: CONCAT(filial, '-', coleta) NOT IN (...)
        $filtroColetas = " AND CONCAT(a.filial, '-', a.coleta) NOT IN ($coletasExistentes) ";
    }
    
    // ============================================================================
    // BUSCAR COLETAS PENDENTES
    // ============================================================================
    
    // CORREÇÃO: Buscar apenas statusmobile IN (0, 1)
    // statusmobile = 0: Nunca foi sincronizada
    // statusmobile = 1: Foi criada/atualizada mas não sincronizada
    // statusmobile = 2: Já foi enviada ao celular (não deve buscar novamente)
    // statusmobile = 3: Finalizada no celular
    
    $sql = "
        SELECT 
            a.codigo,
            a.filial,
            a.coleta,
            a.data,
            a.horalimite,
            a.cnpj,
            a.nome,
            a.estado,
            a.cidade,
            a.bairro,
            a.endereco,
            a.cep,
            a.latitude,
            a.longitude,
            a.peso,
            a.volumes,
            a.status,
            a.statusmobile,
            a.ocorrencia,
            a.observacao,
            a.imagemcanc,
            a.assinatura,
            a.chavenota,
            a.placa,
            a.datamovimento,
            a.horamovimento,
            a.statuscliente,
            a.usuario,
            a.manfilial,
            a.manmanife,
            a.manserie,
            DATE_FORMAT(a.data, '%d/%m/%Y') AS datacoleta,
            a.latend,
            a.longend,
            CONCAT(a.filial, '-', a.coleta) AS chave_coleta
        FROM coletas a
        WHERE a.statusmobile IN (0, 1)
            AND a.status <> 5
            AND (a.statuscliente IS NULL OR a.statuscliente = '')
            AND a.placa = :placa
            $filtroColetas
        ORDER BY a.data, a.horalimite
        LIMIT 100
    ";
    
    $stmt = $conn->prepare($sql);
    $stmt->bindParam(':placa', $placa, PDO::PARAM_STR);
    $stmt->execute();
    
    $coletas = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    // ============================================================================
    // ATUALIZAR STATUS DAS COLETAS ENVIADAS
    // ============================================================================
    
    if (count($coletas) > 0 && !empty($usuario)) {
        // Atualiza apenas as coletas que estão sendo enviadas agora
        $chaves = array_map(function($c) {
            return "'" . $c['filial'] . "-" . $c['coleta'] . "'";
        }, $coletas);
        $chavesString = implode(',', $chaves);
        
        $sqlUpdate = "
            UPDATE coletas 
            SET 
                usuimporta = :usuario,
                statusmobile = 2,
                dtreccelular = NOW()
            WHERE CONCAT(filial, '-', coleta) IN ($chavesString)
                AND placa = :placa
        ";
        
        $stmtUpdate = $conn->prepare($sqlUpdate);
        $stmtUpdate->bindParam(':usuario', $usuario, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':placa', $placa, PDO::PARAM_STR);
        $stmtUpdate->execute();
    }
    
    // ============================================================================
    // RETORNAR RESULTADO
    // ============================================================================
    
    echo json_encode([
        'success' => true,
        'total' => count($coletas),
        'coletas' => $coletas,
        'placa' => $placa,
        'usuario' => $usuario
    ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    
} catch (PDOException $e) {
    retornarErro('500', 'Erro no banco de dados: ' . $e->getMessage());
} catch (Exception $e) {
    retornarErro('500', 'Erro interno: ' . $e->getMessage());
}
?>