<?php
// ============================================================
// ERP - ActSafe | API de Recebimento de Inspeção Mobile
// Endpoint público — recebe fotos e dados via POST
// Desenvolvido por Antônio da Luz
// ============================================================
header('Content-Type: application/json; charset=utf-8');
require_once '5_config/config.php';

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    echo json_encode(['sucesso' => false, 'erro' => 'Método não permitido.']);
    exit;
}

$token = limpar($_POST['token'] ?? '');
if (!$token) {
    echo json_encode(['sucesso' => false, 'erro' => 'Token inválido.']);
    exit;
}

$db = getDB();
$stmt = $db->prepare("SELECT * FROM inspecoes WHERE token = ? LIMIT 1");
$stmt->execute([$token]);
$ins = $stmt->fetch();

if (!$ins) {
    echo json_encode(['sucesso' => false, 'erro' => 'Inspeção não encontrada.']);
    exit;
}

if ($ins['status'] === 'concluida') {
    echo json_encode(['sucesso' => false, 'erro' => 'Esta inspeção já foi concluída.']);
    exit;
}

// ============================================================
// PROCESSAR DADOS
// ============================================================
$tecnico_nome  = limpar($_POST['tecnico_nome'] ?? '');
$obs_gerais    = limpar($_POST['obs_gerais'] ?? '');
$pa_what       = limpar($_POST['pa_what'] ?? '');
$pa_who        = limpar($_POST['pa_who'] ?? '');
$pa_when       = limpar($_POST['pa_when'] ?? '') ?: null;
$pa_how        = limpar($_POST['pa_how'] ?? '');
$total_fotos   = (int)($_POST['total_fotos'] ?? 0);

// ============================================================
// SALVAR FOTOS
// ============================================================
$upload_dir = UPLOAD_DIR . 'inspecoes/' . $ins['id'] . '/';
if (!is_dir($upload_dir)) {
    mkdir($upload_dir, 0755, true);
}

$fotos_salvas = [];
for ($i = 0; $i < $total_fotos; $i++) {
    if (!isset($_FILES['foto_' . $i]) || $_FILES['foto_' . $i]['error'] !== UPLOAD_ERR_OK) continue;

    $file    = $_FILES['foto_' . $i];
    $legenda = limpar($_POST['legenda_' . $i] ?? '');
    $nc      = limpar($_POST['nc_' . $i] ?? '');
    $ordem   = (int)($_POST['ordem_' . $i] ?? $i + 1);

    // Validar tipo
    $ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
    if (!in_array($ext, ['jpg','jpeg','png','gif','webp'])) continue;

    // Nome único
    $nome_arquivo = 'insp_' . $ins['id'] . '_' . time() . '_' . $i . '.' . $ext;
    $caminho_completo = $upload_dir . $nome_arquivo;
    $caminho_relativo = 'inspecoes/' . $ins['id'] . '/' . $nome_arquivo;

    if (move_uploaded_file($file['tmp_name'], $caminho_completo)) {
        $fotos_salvas[] = [
            'arquivo' => $caminho_relativo,
            'legenda' => $legenda,
            'nc'      => $nc,
            'ordem'   => $ordem,
        ];
    }
}

// ============================================================
// MONTAR OBSERVAÇÕES FINAIS COM PLANO DE AÇÃO
// ============================================================
$obs_finais = $obs_gerais;
if ($pa_what || $pa_who || $pa_how) {
    $obs_finais .= "\n\n=== PLANO DE AÇÃO ===\n";
    if ($pa_what) $obs_finais .= "O QUÊ: $pa_what\n";
    if ($pa_who)  $obs_finais .= "QUEM: $pa_who\n";
    if ($pa_when) $obs_finais .= "QUANDO: $pa_when\n";
    if ($pa_how)  $obs_finais .= "COMO: $pa_how\n";
}

// ============================================================
// ATUALIZAR INSPEÇÃO NO BANCO
// ============================================================
try {
    $db->beginTransaction();

    // Atualizar status da inspeção
    $stmt = $db->prepare("
        UPDATE inspecoes
        SET status = 'concluida',
            concluida_em = NOW(),
            tecnico_nome = COALESCE(NULLIF(?, ''), tecnico_nome),
            observacoes_finais = ?
        WHERE token = ?
    ");
    $stmt->execute([$tecnico_nome, $obs_finais, $token]);

    // Salvar fotos no banco
    foreach ($fotos_salvas as $foto) {
        $stmt = $db->prepare("
            INSERT INTO inspecao_fotos (inspecao_id, arquivo, legenda, nao_conformidade, ordem)
            VALUES (?, ?, ?, ?, ?)
        ");
        $stmt->execute([$ins['id'], $foto['arquivo'], $foto['legenda'], $foto['nc'], $foto['ordem']]);
    }

    // Criar não conformidades automáticas para fotos com NC preenchida
    foreach ($fotos_salvas as $foto) {
        if (!empty($foto['nc'])) {
            $stmt = $db->prepare("
                INSERT INTO nao_conformidades (unidade_id, equipamento_id, descricao, referencia_item, status)
                VALUES (?, ?, ?, ?, 'aberta')
            ");
            $stmt->execute([
                $ins['unidade_id'],
                $ins['equipamento_id'],
                $foto['nc'],
                'Inspeção #' . $ins['id'] . ' — ' . $ins['norma']
            ]);

            // Criar plano de ação se preenchido
            if ($pa_what || $pa_who || $pa_how) {
                $nc_id = $db->lastInsertId();
                $stmt = $db->prepare("
                    INSERT INTO planos_acao (nao_conformidade_id, what, who, when_data, how, status)
                    VALUES (?, ?, ?, ?, ?, 'pendente')
                ");
                $stmt->execute([$nc_id, $pa_what, $pa_who, $pa_when, $pa_how]);
            }
        }
    }

    $db->commit();

    echo json_encode([
        'sucesso'      => true,
        'inspecao_id'  => $ins['id'],
        'fotos_salvas' => count($fotos_salvas),
        'ncs_criadas'  => count(array_filter($fotos_salvas, fn($f) => !empty($f['nc']))),
    ]);

} catch (Exception $e) {
    $db->rollBack();
    http_response_code(500);
    echo json_encode(['sucesso' => false, 'erro' => 'Erro ao salvar: ' . $e->getMessage()]);
}
