<?php
/**
 * API de Recebimento de Imagens de Entrega
 * Endpoint: api/recImagensEntrega.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)) {
        echo json_encode([
            'code' => '400',
            'message' => 'Dados inválidos!'
        ], JSON_UNESCAPED_UNICODE);
        die();
    }
    
    $totalImagens = count($obj);
    $sucessos = 0;
    $erros = 0;
    $detalhes = [];
    
    // Criar diretório de imagens se não existir
    $diretorioBase = './imagens/entregas/';
    if (!file_exists($diretorioBase)) {
        mkdir($diretorioBase, 0755, true);
    }
    
    // Processar cada imagem
    foreach ($obj as $index => $item) {
        try {
            // Validar campos obrigatórios
            if (!isset($item->cte) || !isset($item->filial) || !isset($item->imagem) || !isset($item->arquivo)) {
                $erros++;
                $detalhes[] = "Imagem " . ($index + 1) . ": Campos obrigatórios faltando (cte, filial, imagem, arquivo)";
                continue;
            }
            
            $cte = $item->cte;
            $filial = $item->filial;
            $serie = isset($item->serie) ? $item->serie : '';
            $manifesto = isset($item->manmanifesto) ? $item->manmanifesto : '';
            $manfilial = isset($item->manfilial) ? $item->manfilial : '';
            $manserie = isset($item->manserie) ? $item->manserie : '';
            $placa = isset($item->placa) ? $item->placa : '';
            $usuario = isset($item->usuario) ? $item->usuario : '';
            $nomeArquivo = $item->arquivo;
            $imagemBase64 = $item->imagem;
            
            // Decodificar base64
            $imagemDecodificada = base64_decode($imagemBase64);
            
            if ($imagemDecodificada === false) {
                $erros++;
                $detalhes[] = "Imagem " . ($index + 1) . ": Erro ao decodificar base64";
                continue;
            }
            
            // Gerar nome único para o arquivo
            $extensao = 'jpg';
            $nomeArquivoFinal = $filial . '-' . $cte . '-' . time() . '-' . $index . '.' . $extensao;
            $caminhoCompleto = $diretorioBase . $nomeArquivoFinal;
            
            // Salvar arquivo no servidor
            if (!file_put_contents($caminhoCompleto, $imagemDecodificada)) {
                $erros++;
                $detalhes[] = "Imagem " . ($index + 1) . ": Erro ao salvar arquivo no servidor";
                continue;
            }
            
            // Inserir registro no banco de dados
            $sql = "INSERT INTO imagensentrega (
                        cte, filial, serie, manifesto, manfilial, manserie, 
                        placa, arquivo, usuario, dtrecebimento
                    ) VALUES (
                        :cte, :filial, :serie, :manifesto, :manfilial, :manserie,
                        :placa, :arquivo, :usuario, CURRENT_TIMESTAMP()
                    )";
            
            $stmt = $conn->prepare($sql);
            $stmt->bindParam(':cte', $cte, PDO::PARAM_STR);
            $stmt->bindParam(':filial', $filial, PDO::PARAM_STR);
            $stmt->bindParam(':serie', $serie, PDO::PARAM_STR);
            $stmt->bindParam(':manifesto', $manifesto, PDO::PARAM_STR);
            $stmt->bindParam(':manfilial', $manfilial, PDO::PARAM_STR);
            $stmt->bindParam(':manserie', $manserie, PDO::PARAM_STR);
            $stmt->bindParam(':placa', $placa, PDO::PARAM_STR);
            $stmt->bindParam(':arquivo', $nomeArquivoFinal, PDO::PARAM_STR);
            $stmt->bindParam(':usuario', $usuario, PDO::PARAM_STR);
            
            if ($stmt->execute()) {
                $sucessos++;
                $detalhes[] = "Imagem " . ($index + 1) . ": Salva com sucesso - $nomeArquivoFinal";
            } else {
                $erros++;
                $detalhes[] = "Imagem " . ($index + 1) . ": Erro ao inserir no banco de dados";
                // Remove arquivo se não conseguiu inserir no banco
                @unlink($caminhoCompleto);
            }
            
        } catch (Exception $e) {
            $erros++;
            $detalhes[] = "Imagem " . ($index + 1) . ": Erro - " . $e->getMessage();
        }
    }
    
    // Retornar resultado
    echo json_encode([
        'code' => '200',
        'message' => "Processamento concluído",
        'total' => $totalImagens,
        'sucesso' => $sucessos,
        'erros' => $erros,
        'detalhes' => $detalhes
    ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    
} 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);
}
?>