<?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.toner_modelo,
        s.nome AS setor_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
     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();
        $acao = impTexto($_POST['acao'] ?? 'salvar', 40);
        $usuario = impressorasUsuarioAtual();

        if ($acao === 'consumir_toner') {
            $modelo = impTexto($_POST['toner_modelo'] ?? '', 100);
            $quantidade = max(1, (int) ($_POST['quantidade'] ?? 1));
            $observacao = impNulo($_POST['observacao'] ?? '', 500);

            if ($modelo === '') {
                throw new RuntimeException(
                    'Selecione o toner utilizado.'
                );
            }

            $mysqli->begin_transaction();

            $stmt = impExecutar(
                $mysqli,
                'SELECT quantidade
                 FROM tonner_estoque
                 WHERE modelo = ?
                 FOR UPDATE',
                [$modelo]
            );

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

            if (!$estoque) {
                throw new RuntimeException(
                    'O toner selecionado não existe no estoque.'
                );
            }

            $anterior = (int) $estoque['quantidade'];

            if ($anterior < $quantidade) {
                throw new RuntimeException(
                    'Estoque insuficiente para essa saída.'
                );
            }

            $posterior = $anterior - $quantidade;

            impExecutar(
                $mysqli,
                'UPDATE tonner_estoque
                 SET quantidade = ?
                 WHERE modelo = ?',
                [$posterior,$modelo]
            )->close();

            $destino =
                'Manutenção da impressora ' .
                $manutencao['marca'] . ' ' .
                $manutencao['modelo'] .
                ' • Pat. ' .
                ($manutencao['patrimonio'] ?: 'sem patrimônio');

            impExecutar(
                $mysqli,
                "INSERT INTO tonner_movimentacoes (
                    modelo,tipo,quantidade,estoque_anterior,
                    estoque_posterior,responsavel,responsavel_entrega,
                    destino,observacao,usuario_sistema
                 )
                 VALUES (?,'SAIDA',?,?,?,?,?,?,?,?)",
                [
                    $modelo,$quantidade,$anterior,$posterior,
                    $usuario,$usuario,$destino,$observacao,$usuario
                ]
            )->close();

            impExecutar(
                $mysqli,
                "INSERT INTO ti_impressora_consumos (
                    manutencao_id,impressora_id,tipo,item,
                    quantidade,observacao,usuario
                 )
                 VALUES (?,?,'TONER',?,?,?,?)",
                [
                    $id,
                    (int) $manutencao['impressora_id'],
                    $modelo,
                    $quantidade,
                    $observacao,
                    $usuario
                ]
            )->close();

            impRegistrarHistorico(
                $mysqli,
                (int) $manutencao['impressora_id'],
                $id,
                'TONER_UTILIZADO',
                $manutencao['status'],
                $manutencao['status'],
                $manutencao['setor_nome'],
                $manutencao['setor_nome'],
                'MANUTENÇÃO TI',
                'MANUTENÇÃO TI',
                "{$quantidade} unidade(s) do toner {$modelo} utilizada(s)."
            );

            $mysqli->commit();
            impFlash(
                'sucesso',
                'Saída de toner registrada e vinculada à manutenção.'
            );
            impRedirecionar(
                'manutencao_impressora.php?id=' . $id
            );
        }

        $status = impTexto(
            $_POST['status'] ?? 'EM_MANUTENCAO',
            40
        );
        $diagnostico = impNulo(
            $_POST['diagnostico'] ?? '',
            8000
        );
        $causa = impNulo(
            $_POST['causa'] ?? '',
            5000
        );
        $servicos = impNulo(
            $_POST['servicos_realizados'] ?? '',
            8000
        );
        $pecas = impNulo(
            $_POST['pecas_substituidas'] ?? '',
            5000
        );
        $contadorSaida = max(
            0,
            (int) ($_POST['contador_saida'] ?? 0)
        );

        $testes = [];

        foreach ([
            'impressao_preta',
            'impressao_colorida',
            'frente_verso',
            'scanner',
            'alimentador',
            'rede',
            'usb',
            'wifi',
            'qualidade',
            'ruidos',
            'atolamento'
        ] as $teste) {
            $testes[$teste] = !empty(
                $_POST['testes'][$teste]
            );
        }

        $testesJson = json_encode(
            $testes,
            JSON_UNESCAPED_UNICODE
        );

        impExecutar(
            $mysqli,
            "UPDATE ti_impressora_manutencoes
             SET status=?,diagnostico=?,causa=?,servicos_realizados=?,
                 pecas_substituidas=?,testes_json=?,
                 contador_saida=NULLIF(?,0),tecnico_manutencao=?,
                 data_inicio=COALESCE(data_inicio,NOW())
             WHERE id=?",
            [
                $status,$diagnostico,$causa,$servicos,$pecas,
                $testesJson,$contadorSaida,$usuario,$id
            ]
        )->close();

        impExecutar(
            $mysqli,
            "UPDATE ti_impressoras
             SET status=?,local_atual='MANUTENÇÃO TI',
                 atualizado_por=?
             WHERE id=?",
            [
                $status,
                $usuario,
                (int) $manutencao['impressora_id']
            ]
        )->close();

        impRegistrarHistorico(
            $mysqli,
            (int) $manutencao['impressora_id'],
            $id,
            'MANUTENCAO_ATUALIZADA',
            $manutencao['status'],
            $status,
            $manutencao['setor_nome'],
            $manutencao['setor_nome'],
            'MANUTENÇÃO TI',
            'MANUTENÇÃO TI',
            'Diagnóstico e andamento atualizados.'
        );

        impFlash(
            'sucesso',
            'Manutenção atualizada com sucesso.'
        );
        impRedirecionar(
            'manutencao_impressora.php?id=' . $id
        );
    } catch (Throwable $e) {
        try {
            $mysqli->rollback();
        } catch (Throwable) {
        }

        $erro = $e->getMessage();
    }
}

$flash = impConsumirFlash();
$consumos = [];

$stmt = impExecutar(
    $mysqli,
    'SELECT *
     FROM ti_impressora_consumos
     WHERE manutencao_id = ?
     ORDER BY criado_em DESC',
    [$id]
);

$resultado = $stmt->get_result();

while ($linha = $resultado->fetch_assoc()) {
    $consumos[] = $linha;
}

$stmt->close();

$toners = [];

if (impTabelaExiste($mysqli, 'tonner_estoque')) {
    $resultado = $mysqli->query(
        'SELECT modelo,quantidade
         FROM tonner_estoque
         ORDER BY modelo'
    );

    if ($resultado) {
        while ($linha = $resultado->fetch_assoc()) {
            $toners[] = $linha;
        }
    }
}

$testesAtuais = json_decode(
    (string) ($manutencao['testes_json'] ?? '{}'),
    true
) ?: [];
?>
<!doctype html>
<html lang="pt-BR">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>Manutenção 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-tools"></i><?= impE($manutencao['numero_atendimento']) ?></span>
                <h1 class="header-title"><?= impE($manutencao['marca'] . ' ' . $manutencao['modelo']) ?></h1>
                <p class="header-subtitle">Patrimônio <?= impE($manutencao['patrimonio'] ?: 'não informado') ?> • Defeito: <?= impE($manutencao['defeito_relatado']) ?></p>
            </div>
        </div>
        <nav class="header-actions">
            <a href="impressoras.php" class="header-button"><i class="bi bi-arrow-left"></i>Impressoras</a>
            <a href="detalhes_impressora.php?id=<?= (int) $manutencao['impressora_id'] ?>" class="header-button"><i class="bi bi-eye-fill"></i>Ficha</a>
            <a href="finalizar_manutencao_impressora.php?id=<?= $id ?>" class="header-button primary"><i class="bi bi-check2-circle"></i>Finalizar</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; ?>
<?php if ($flash): ?>
    <div class="flash <?= $flash['tipo'] === 'sucesso' ? 'success' : 'error' ?>"><i class="bi bi-check-circle-fill"></i><?= impE($flash['mensagem']) ?></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 ?>">
<input type="hidden" name="acao" value="salvar">
<section class="form-section">
    <h3><i class="bi bi-search"></i>Diagnóstico e solução</h3>
    <div class="form-grid">
        <div class="form-group">
            <label>Andamento</label>
            <select class="control" name="status">
                <?php foreach ([
                    'AGUARDANDO_DIAGNOSTICO'=>'Aguardando diagnóstico',
                    'EM_MANUTENCAO'=>'Em manutenção',
                    'AGUARDANDO_PECA'=>'Aguardando peça',
                    'AGUARDANDO_TONER'=>'Aguardando toner',
                    'ASSISTENCIA_EXTERNA'=>'Assistência externa'
                ] as $op=>$rotulo): ?>
                    <option value="<?= $op ?>" <?= $manutencao['status'] === $op ? 'selected' : '' ?>><?= $rotulo ?></option>
                <?php endforeach; ?>
            </select>
        </div>
        <div class="form-group"><label>Contador após serviço</label><input class="control" type="number" min="0" name="contador_saida" value="<?= (int) ($manutencao['contador_saida'] ?? 0) ?>"></div>
        <div class="form-group full"><label>Diagnóstico</label><textarea class="control" name="diagnostico"><?= impE($manutencao['diagnostico']) ?></textarea></div>
        <div class="form-group full"><label>Causa encontrada</label><textarea class="control" name="causa"><?= impE($manutencao['causa']) ?></textarea></div>
        <div class="form-group full"><label>Serviços realizados</label><textarea class="control" name="servicos_realizados"><?= impE($manutencao['servicos_realizados']) ?></textarea></div>
        <div class="form-group full"><label>Peças substituídas</label><textarea class="control" name="pecas_substituidas"><?= impE($manutencao['pecas_substituidas']) ?></textarea></div>
    </div>
</section>

<section class="form-section">
    <h3><i class="bi bi-check2-square"></i>Testes executados</h3>
    <div class="form-grid">
        <?php foreach ([
            'impressao_preta'=>'Impressão preta',
            'impressao_colorida'=>'Impressão colorida',
            'frente_verso'=>'Frente e verso',
            'scanner'=>'Scanner',
            'alimentador'=>'Alimentador automático',
            'rede'=>'Rede',
            'usb'=>'USB',
            'wifi'=>'Wi-Fi',
            'qualidade'=>'Qualidade de impressão',
            'ruidos'=>'Ruídos verificados',
            'atolamento'=>'Atolamento corrigido'
        ] as $chave=>$rotulo): ?>
            <div class="form-group">
                <label style="display:flex;gap:8px;align-items:center;text-transform:none;font-size:8px">
                    <input type="checkbox" name="testes[<?= $chave ?>]" value="1" <?= !empty($testesAtuais[$chave]) ? 'checked' : '' ?>>
                    <?= $rotulo ?>
                </label>
            </div>
        <?php endforeach; ?>
    </div>
</section>
<div class="form-actions"><button class="button primary" type="submit"><i class="bi bi-check-circle-fill"></i>Salvar manutenção</button></div>
</form>

<form method="post" class="form-card">
<input type="hidden" name="csrf_token" value="<?= impE($csrf) ?>">
<input type="hidden" name="id" value="<?= $id ?>">
<input type="hidden" name="acao" value="consumir_toner">
<section class="form-section">
    <h3><i class="bi bi-printer-fill"></i>Utilizar toner do estoque</h3>
    <div class="form-grid">
        <div class="form-group two">
            <label>Modelo</label>
            <select class="control" name="toner_modelo" required>
                <option value="">Selecione</option>
                <?php foreach ($toners as $t): ?>
                    <option value="<?= impE($t['modelo']) ?>" <?= $manutencao['toner_modelo'] === $t['modelo'] ? 'selected' : '' ?>>
                        <?= impE($t['modelo']) ?> • <?= (int) $t['quantidade'] ?> disponível(is)
                    </option>
                <?php endforeach; ?>
            </select>
        </div>
        <div class="form-group"><label>Quantidade</label><input class="control" type="number" min="1" name="quantidade" value="1"></div>
        <div class="form-group full"><label>Observação</label><input class="control" name="observacao" maxlength="500" placeholder="Motivo da troca, cor utilizada..."></div>
    </div>
</section>
<div class="form-actions"><button class="button green" type="submit"><i class="bi bi-box-arrow-right"></i>Dar saída e vincular</button></div>
</form>

<section class="panel">
    <div class="panel-head">
        <div class="panel-title"><span class="panel-title-icon"><i class="bi bi-box-seam-fill"></i></span><div><h3>Materiais utilizados</h3><p>Saídas vinculadas a este atendimento.</p></div></div>
    </div>
    <div style="padding:14px">
        <?php if (!$consumos): ?>
            <div class="empty"><i class="bi bi-box"></i><strong>Nenhum consumo registrado</strong></div>
        <?php else: ?>
            <div class="timeline">
                <?php foreach ($consumos as $c): ?>
                    <article class="timeline-item">
                        <span class="timeline-icon"><i class="bi bi-printer-fill"></i></span>
                        <span><strong><?= impE($c['item']) ?> • <?= (int) $c['quantidade'] ?> unidade(s)</strong><span><?= impE($c['observacao'] ?: 'Sem observação') ?> • por <?= impE($c['usuario']) ?></span></span>
                        <time><?= impE(impData($c['criado_em'])) ?></time>
                    </article>
                <?php endforeach; ?>
            </div>
        <?php endif; ?>
    </div>
</section>
</main>
</div>
</body>
</html>
