<?php
/**
 * API de Entregas
 * Endpoint: api/entregas.php
 */

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

include_once('./classes/conexao.php');

// Validar token
if(!isset($_GET['token'])){
    echo json_encode([
        'code' => '400',
        'message' => 'Token não informado!'
    ], JSON_UNESCAPED_UNICODE);
    die();
}

$token = 'ajr123';
$chave = $_GET['token'];

if($chave !== $token){
    echo json_encode([
        'code' => '400',
        'message' => 'Token inválido!'
    ], JSON_UNESCAPED_UNICODE);
    die();
}

try {
    // Ler dados JSON do corpo da requisição
    $json = file_get_contents("php://input");
    $obj = json_decode($json);
    
    if (!$obj || !is_array($obj) || count($obj) === 0) {
        echo json_encode([
            'code' => '400',
            'message' => 'Dados inválidos!'
        ], JSON_UNESCAPED_UNICODE);
        die();
    }
    
    $itemsom = $obj[0];
    
    $placa = isset($itemsom->placa) ? $itemsom->placa : '';
    $jusuario = isset($itemsom->usuario) ? $itemsom->usuario : '';
    $jcte = isset($itemsom->cte) ? $itemsom->cte : '';
    
    if(empty($placa)){
        echo json_encode([
            'code' => '400',
            'message' => 'Placa não informada!'
        ], JSON_UNESCAPED_UNICODE);
        die();
    }
    
    // Remove vírgula final se existir
    $cte = rtrim($jcte, ",");
    
    // Monta filtro de CTE com aspas simples ao redor de cada valor
    if($cte == ""){
        $filcte = " ";	
    } else {
        // Separa os valores e adiciona aspas simples
        $cteArray = explode(',', $cte);
        $cteQuoted = array_map(function($item) {
            return "'" . trim($item) . "'";
        }, $cteArray);
        $cteWithQuotes = implode(',', $cteQuoted);
        
        $filcte = " AND concat(filial,'-',cte) NOT IN ($cteWithQuotes) ";
    }
    
    // Buscar entregas
    $sql = "SELECT 
                codigo, 
                filial AS filial, 
                cte AS cte, 
                data, 
                horalimite, 
                cnpj,
                nome, 
                estado, 
                cidade, 
                bairro, 
                endereco, 
                cep, 
                latitude, 
                longitude, 
                peso, 
                volumes, 
                status, 
                statusmobile, 
                CASE WHEN ocorrencia = 'S' THEN '1' ELSE '' END AS ocorrencia, 
                observacao,
                imagemcanc, 
                assinatura, 
                chavenota, 
                placa, 
                datamovimento, 
                horamovimento, 
                statuscliente, 
                tipo, 
                manifesto AS manifesto, 
                filmanifesto AS filmanifesto, 
                serieman, 
                nomerecebedor, 
                docrecebedor, 
                usuario, 
                imagem,
                DATE_FORMAT(data,'%d/%m/%Y') AS dataentrega,
                latend, 
                longend
            FROM entregas  
            WHERE data = CURDATE()
                AND statusmobile IN (0, 1)
                AND status <> 5
                AND placa = :placa
                $filcte 
            ORDER BY codigo";
    
    $stmt = $conn->prepare($sql);
    $stmt->bindParam(':placa', $placa, PDO::PARAM_STR);
    $stmt->execute();
    
    $entregas = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    // Retornar entregas
    echo json_encode($entregas, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    
    // Atualizar statusmobile das entregas retornadas
    if (count($entregas) > 0) {
        $updateSql = "UPDATE entregas 
                     SET usuimporta = :usuario, 
                         statusmobile = 2, 
                         dtreccelular = CURRENT_TIMESTAMP()
                     WHERE IFNULL(statuscliente,0) <> 1
                         AND IFNULL(statusmobile,0) IN (0, 1)
                         AND status <> 5
                         AND placa = :placa
                         $filcte";
        
        $updateStmt = $conn->prepare($updateSql);
        $updateStmt->bindParam(':usuario', $jusuario, PDO::PARAM_STR);
        $updateStmt->bindParam(':placa', $placa, PDO::PARAM_STR);
        $updateStmt->execute();
    }
    
} catch (PDOException $e) {
    echo json_encode([
        'code' => '500',
        'message' => 'Erro no banco de dados: ' . $e->getMessage()
    ], JSON_UNESCAPED_UNICODE);
} catch (Exception $e) {
    echo json_encode([
        'code' => '500',
        'message' => 'Erro interno: ' . $e->getMessage()
    ], JSON_UNESCAPED_UNICODE);
}
?>