<?php
/**
 * API de Recebimento de Imagens de Coleta
 * Endpoint: api/recImagensColeta.php
 */

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');

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' => '401', 'message' => 'Token inválido!'], JSON_UNESCAPED_UNICODE);
    die();
}

try {
    // Receber dados JSON
    $json = file_get_contents("php://input");
    $dados = json_decode($json);
    
    if(!$dados || !is_array($dados) || count($dados) === 0){
        echo json_encode(['code' => '400', 'message' => 'Dados inválidos!'], JSON_UNESCAPED_UNICODE);
        die();
    }
    
    $sucesso = 0;
    $erros = 0;
    $mensagensErro = [];
    
    // Criar diretório de imagens se não existir
    $diretorioImagens = './imagens/coletas/';
    if(!is_dir($diretorioImagens)){
        mkdir($diretorioImagens, 0755, true);
    }
    
    // Processar cada imagem
    foreach($dados as $imagem){
        $coleta = isset($imagem->coleta) ? trim($imagem->coleta) : '';
        $filial = isset($imagem->filial) ? trim($imagem->filial) : '';
        $manserie = isset($imagem->manserie) ? trim($imagem->manserie) : '';
        $manfilial = isset($imagem->manfilial) ? trim($imagem->manfilial) : '';
        $manmanifesto = isset($imagem->manmanifesto) ? trim($imagem->manmanifesto) : '';
        $usuario = isset($imagem->usuario) ? trim($imagem->usuario) : '';
        $placa = isset($imagem->placa) ? trim($imagem->placa) : '';
        $imagemBase64 = isset($imagem->imagem) ? $imagem->imagem : '';
        $nomeArquivo = isset($imagem->arquivo) ? trim($imagem->arquivo) : '';
        
        // Validações
        if(empty($coleta) || empty($filial)){
            $erros++;
            $mensagensErro[] = "Coleta ou filial não informada";
            continue;
        }
        
        if(empty($placa)){
            $erros++;
            $mensagensErro[] = "Placa não informada para coleta $filial-$coleta";
            continue;
        }
        
        if(empty($imagemBase64)){
            $erros++;
            $mensagensErro[] = "Imagem não informada para coleta $filial-$coleta";
            continue;
        }
        
        // Gerar nome do arquivo se não foi informado
        if(empty($nomeArquivo)){
            $nomeArquivo = "Coleta-$filial-$coleta-" . time() . ".jpg";
        }
        
        try {
            // Salvar arquivo de imagem
            $caminhoCompleto = $diretorioImagens . $nomeArquivo;
            
            // Remove cabeçalho data:image se existir
            if(strpos($imagemBase64, 'data:image') !== false){
                $imagemBase64 = explode(',', $imagemBase64)[1];
            }
            
            $resultado = file_put_contents($caminhoCompleto, base64_decode($imagemBase64));
            
            if($resultado === false){
                $erros++;
                $mensagensErro[] = "Erro ao salvar arquivo de imagem: $nomeArquivo";
                continue;
            }
            
            // Inserir registro no banco
            $sql = "INSERT INTO imagenscoleta 
                    (coleta, filial, manserie, manfilial, manmanifesto, arquivo, dtrecebimento, usuario, placa) 
                    VALUES 
                    (:coleta, :filial, :manserie, :manfilial, :manmanifesto, :arquivo, NOW(), :usuario, :placa)";
            
            $stmt = $conn->prepare($sql);
            $stmt->bindParam(':coleta', $coleta, PDO::PARAM_STR);
            $stmt->bindParam(':filial', $filial, PDO::PARAM_STR);
            $stmt->bindParam(':manserie', $manserie, PDO::PARAM_STR);
            $stmt->bindParam(':manfilial', $manfilial, PDO::PARAM_STR);
            $stmt->bindParam(':manmanifesto', $manmanifesto, PDO::PARAM_STR);
            $stmt->bindParam(':arquivo', $nomeArquivo, PDO::PARAM_STR);
            $stmt->bindParam(':usuario', $usuario, PDO::PARAM_STR);
            $stmt->bindParam(':placa', $placa, PDO::PARAM_STR);
            
            $stmt->execute();
            $sucesso++;
            
        } catch(PDOException $e) {
            $erros++;
            $mensagensErro[] = "Erro ao inserir imagem $nomeArquivo: " . $e->getMessage();
            
            // Remove arquivo se falhou ao inserir no banco
            if(file_exists($caminhoCompleto)){
                unlink($caminhoCompleto);
            }
        }
    }
    
    // Retornar resultado
    $response = [
        'code' => '200',
        'message' => 'Processamento concluído',
        'sucesso' => $sucesso,
        'erros' => $erros
    ];
    
    if(count($mensagensErro) > 0){
        $response['detalhes'] = $mensagensErro;
    }
    
    echo json_encode($response, JSON_UNESCAPED_UNICODE);
    
} catch(Exception $e) {
    echo json_encode([
        'code' => '500',
        'message' => 'Erro interno: ' . $e->getMessage()
    ], JSON_UNESCAPED_UNICODE);
}
?>