<?php
declare(strict_types=1);

require_once __DIR__ . '/auth.php';
require_once __DIR__ . '/conexao.php';
require_once __DIR__ . '/impressoras_helpers.php';

date_default_timezone_set('America/Sao_Paulo');
impressorasExigirAcesso();
$mysqli->set_charset('utf8mb4');

$id = (int) ($_GET['id'] ?? $_POST['id'] ?? 0);
$csrf = impCsrf();
$erro = '';

$stmt = impExecutar(
    $mysqli,
    "SELECT
        m.*,
        i.marca,
        i.modelo,
        i.patrimonio,
        i.numero_serie,
        i.responsavel_nome,
        i.localizacao_texto,
        i.setor_id,
        i.ambiente_id,
        s.nome AS setor_nome,
        a.nome AS ambiente_nome
     FROM ti_impressora_manutencoes AS m
     JOIN ti_impressoras AS i
        ON i.id = m.impressora_id
     LEFT JOIN ti_setores AS s
        ON s.id = i.setor_id
     LEFT JOIN ti_ambientes AS a
        ON a.id = i.ambiente_id
     WHERE m.id = ?
     LIMIT 1",
    [$id]
);

$manutencao = $stmt->get_result()->fetch_assoc();
$stmt->close();

if (!$manutencao) {
    http_response_code(404);
    exit('Atendimento não encontrado.');
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    try {
        impValidarCsrf();

        $pessoa = impTexto(
            $_POST['pessoa_retirada'] ?? '',
            150
        );
        $destino = impTexto(
            $_POST['destino'] ?? 'EM_USO',
            30
        );
        $responsavel = impNulo(
            $_POST['responsavel_nome'] ?? '',
            150
        );
        $setor = impNulo(
            $_POST['setor_nome'] ?? '',
            150
        );
        $local = impNulo(
            $_POST['localizacao_texto'] ?? '',
            180
        );
        $usuario = impressorasUsuarioAtual();

        if ($pessoa === '') {
            throw new RuntimeException(
                'Informe quem está retirando.'
            );
        }

        $novoStatus = $destino === 'ESTOQUE_RESERVA'
            ? 'ESTOQUE_RESERVA'
            : 'EM_USO';

        $localAtual = $novoStatus === 'ESTOQUE_RESERVA'
            ? 'ESTOQUE / RESERVA TI'
            : ($setor ?: $manutencao['setor_nome']);

        $mysqli->begin_transaction();

        impExecutar(
            $mysqli,
            "UPDATE ti_impressora_manutencoes
             SET status='RETIRADA',
                 pessoa_retirada=?,
                 data_retirada=NOW()
             WHERE id=?",
            [$pessoa,$id]
        )->close();

        impExecutar(
            $mysqli,
            "UPDATE ti_impressoras
             SET status=?,
                 responsavel_nome=COALESCE(?,responsavel_nome),
                 localizacao_texto=COALESCE(?,localizacao_texto),
                 local_atual=?,
                 data_entrega=NOW(),
                 atualizado_por=?
             WHERE id=?",
            [
                $novoStatus,
                $responsavel,
                $local,
                $localAtual,
                $usuario,
                (int) $manutencao['impressora_id']
            ]
        )->close();

        impRegistrarHistorico(
            $mysqli,
            (int) $manutencao['impressora_id'],
            $id,
            'RETIRADA_REGISTRADA',
            'PRONTA_RETIRADA',
            $novoStatus,
            'MANUTENÇÃO TI',
            $setor ?: $manutencao['setor_nome'],
            'PRONTA PARA RETIRADA',
            $localAtual,
            'Retirada por ' . $pessoa . '.'
        );

        $termoId = impCriarTermo(
            $mysqli,
            (int) $manutencao['impressora_id'],
            $id,
            'ENTREGA',
            $pessoa,
            $setor ?: $manutencao['setor_nome'],
            $usuario,
            [
                'numero_atendimento'=>$manutencao['numero_atendimento'],
                'marca'=>$manutencao['marca'],
                'modelo'=>$manutencao['modelo'],
                'patrimonio'=>$manutencao['patrimonio'],
                'serie'=>$manutencao['numero_serie'],
                'solucao'=>$manutencao['solucao'],
                'destino'=>$localAtual,
                'responsavel'=>$responsavel ?: $manutencao['responsavel_nome']
            ]
        );

        $mysqli->commit();

        impRedirecionar(
            'termo_entrega_impressora.php?termo_id=' .
            $termoId .
            '&print=1'
        );
    } catch (Throwable $e) {
        try {
            $mysqli->rollback();
        } catch (Throwable) {
        }

        $erro = $e->getMessage();
    }
}
?>
<!doctype html>
<html lang="pt-BR">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>Retirada de Impressora</title>
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet">
    <link href="impressoras_style.css?v=1" rel="stylesheet">
</head>
<body>
<div class="top-strip"></div>
<div class="bg-grid"></div>
<div class="app">
<header class="main-header">
    <div class="header-content">
        <div class="brand-area">
            <div class="logo-box"><img src="assets/logo_pref.jpg" alt=""></div>
            <div>
                <span class="eyebrow"><i class="bi bi-box-arrow-up-right"></i>Retirada</span>
                <h1 class="header-title"><?= impE($manutencao['marca'] . ' ' . $manutencao['modelo']) ?></h1>
                <p class="header-subtitle"><?= impE($manutencao['numero_atendimento']) ?> • Solução: <?= impE($manutencao['solucao'] ?: 'não informada') ?></p>
            </div>
        </div>
        <nav class="header-actions">
            <a href="impressoras.php" class="header-button primary"><i class="bi bi-arrow-left"></i>Voltar</a>
        </nav>
    </div>
</header>

<main class="main">
<?php if ($erro): ?>
    <div class="flash error"><i class="bi bi-exclamation-triangle-fill"></i><?= impE($erro) ?></div>
<?php endif; ?>

<form method="post" class="form-card">
<input type="hidden" name="csrf_token" value="<?= impE($csrf) ?>">
<input type="hidden" name="id" value="<?= $id ?>">
<section class="form-section">
    <h3><i class="bi bi-person-check-fill"></i>Responsável pela retirada</h3>
    <div class="form-grid">
        <div class="form-group"><label>Quem está retirando *</label><input class="control" name="pessoa_retirada" required maxlength="150"></div>
        <div class="form-group"><label>Destino</label><select class="control" name="destino"><option value="EM_USO">Retorno ao setor</option><option value="ESTOQUE_RESERVA">Estoque / reserva TI</option></select></div>
        <div class="form-group"><label>Responsável pelo equipamento</label><input class="control" name="responsavel_nome" maxlength="150" value="<?= impE($manutencao['responsavel_nome']) ?>"></div>
        <div class="form-group"><label>Setor de destino</label><input class="control" name="setor_nome" maxlength="150" value="<?= impE($manutencao['setor_nome']) ?>"></div>
        <div class="form-group two"><label>Local exato</label><input class="control" name="localizacao_texto" maxlength="180" value="<?= impE($manutencao['localizacao_texto']) ?>"></div>
    </div>
</section>
<div class="form-actions"><button class="button green" type="submit"><i class="bi bi-printer-fill"></i>Registrar retirada e gerar termo</button></div>
</form>
</main>
</div>
</body>
</html>
