<?php
declare(strict_types=1);

require_once 'auth.php';
require_once 'conexao.php';

date_default_timezone_set('America/Sao_Paulo');

if ($mysqli instanceof mysqli) {
    $mysqli->set_charset('utf8mb4');
}

function e(mixed $valor): string
{
    return htmlspecialchars((string) $valor, ENT_QUOTES, 'UTF-8');
}

function dataBR(mixed $data, string $vazio = 'Não informado'): string
{
    $data = trim((string) $data);

    if ($data === '') {
        return $vazio;
    }

    $timestamp = strtotime($data);

    return $timestamp !== false
        ? date('d/m/Y H:i', $timestamp)
        : $vazio;
}

function normalizarStatus(string $status): string
{
    $status = trim($status);

    if (function_exists('mb_strtolower')) {
        $status = mb_strtolower($status, 'UTF-8');
    } else {
        $status = strtolower($status);
    }

    $status = strtr($status, [
        'á' => 'a',
        'à' => 'a',
        'â' => 'a',
        'ã' => 'a',
        'é' => 'e',
        'è' => 'e',
        'ê' => 'e',
        'í' => 'i',
        'ó' => 'o',
        'ô' => 'o',
        'õ' => 'o',
        'ú' => 'u',
        'ç' => 'c'
    ]);

    if (str_contains($status, 'finaliz')) {
        return 'finalizado';
    }

    if (
        str_contains($status, 'pendente') &&
        str_contains($status, 'retirada')
    ) {
        return 'pendente';
    }

    return 'andamento';
}

function caminhoPublico(mixed $caminho): string
{
    $caminho = trim((string) $caminho);

    if ($caminho === '') {
        return '';
    }

    if (
        str_starts_with($caminho, 'http://') ||
        str_starts_with($caminho, 'https://')
    ) {
        return $caminho;
    }

    $caminho = ltrim(str_replace('\\', '/', $caminho), '/');

    return str_contains($caminho, '../')
        ? ''
        : $caminho;
}

$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);

if (!$id || $id <= 0) {
    http_response_code(400);
    exit('Comprovante inválido.');
}

$stmt = $mysqli->prepare("
    SELECT *
    FROM ordens_servico
    WHERE id = ?
    LIMIT 1
");

if (!$stmt) {
    http_response_code(500);
    exit('Não foi possível preparar o comprovante.');
}

$stmt->bind_param('i', $id);
$stmt->execute();

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

if (!$os) {
    http_response_code(404);
    exit('Ordem de serviço não encontrada.');
}

$numeroOs = trim((string) ($os['numero_os'] ?? $id));
$statusOriginal = trim((string) ($os['status'] ?? 'Em andamento'));
$statusCodigo = normalizarStatus($statusOriginal);

$solicitante = trim(
    (string) ($os['nome_solicitante'] ?? 'Não informado')
);

$setor = trim((string) ($os['setor'] ?? 'Não informado'));
$telefone = trim((string) ($os['telefone'] ?? 'Não informado'));

$tipoEquipamento = trim(
    (string) ($os['tipo_equipamento'] ?? 'Não informado')
);

$marca = trim((string) ($os['marca'] ?? ''));
$modelo = trim((string) ($os['modelo'] ?? ''));

$marcaModelo = trim(
    implode(
        ' / ',
        array_filter([$marca, $modelo])
    )
);

$patrimonio = trim((string) ($os['patrimonio'] ?? ''));
$numeroSerie = trim((string) ($os['numero_serie'] ?? ''));

$problema = trim((string) ($os['problema'] ?? ''));
$solucao = trim((string) ($os['solucao'] ?? ''));
$tecnico = trim((string) ($os['tecnico'] ?? ''));

$dataEntrada = dataBR($os['data_entrada'] ?? null);

$dataConclusao = dataBR(
    $os['data_saida'] ??
    $os['data_finalizacao'] ??
    null
);

$prioridade = trim(
    (string) ($os['prioridade'] ?? 'Não informada')
);

$prazo = max(0, (int) ($os['prazo'] ?? 0));
$assinatura = caminhoPublico($os['assinatura'] ?? '');

$codigoDocumento = sprintf(
    'OS-%06d',
    $id
);

$autoPrint = ($_GET['print'] ?? '') === '1';

$statusClass = match ($statusCodigo) {
    'finalizado' => 'done',
    'pendente' => 'waiting',
    default => 'progress'
};

$statusIcon = match ($statusCodigo) {
    'finalizado' => 'bi-check-circle-fill',
    'pendente' => 'bi-box-arrow-up-right',
    default => 'bi-tools'
};

$declaracao = match ($statusCodigo) {
    'finalizado' =>
        'Declaro que o equipamento e o serviço descritos neste termo foram conferidos, entregues e recebidos, estando o atendimento encerrado no sistema.',

    'pendente' =>
        'Declaro que o atendimento técnico foi concluído e que o equipamento foi testado, ficando disponível para conferência e retirada pelo responsável.',

    default =>
        'Este termo apresenta os dados atuais da ordem. A conclusão, a entrega e o recebimento deverão ser confirmados pelas assinaturas abaixo.'
};

$totalTexto = strlen($problema) + strlen($solucao);

$densidade = match (true) {
    $totalTexto > 4200 => 'ultra',
    $totalTexto > 2500 => 'high',
    $totalTexto > 1400 => 'medium',
    default => 'normal'
};
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">

    <meta
        name="viewport"
        content="width=device-width, initial-scale=1"
    >

    <meta name="theme-color" content="#08396f">

    <title>
        Termo da OS <?= e($numeroOs) ?>
    </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"
    >

    <style>
        :root {
            --primary: #08396f;
            --green: #087f5b;
            --red: #bd263d;
            --yellow: #c97900;
            --cyan: #087f9c;

            --text: #172438;
            --muted: #65758a;
            --border: #d8e1ea;
            --soft: #f5f8fb;
            --blue-soft: #eaf4fc;
        }

        * {
            box-sizing: border-box;
        }

        html,
        body {
            min-height: 100%;
        }

        body {
            margin: 0;
            padding: 24px;

            font-family:
                "Inter",
                Arial,
                sans-serif;

            color: var(--text);
            background: #eaf0f5;
        }

        .actions {
            width: 100%;
            max-width: 920px;

            display: flex;
            justify-content: flex-end;
            gap: 8px;

            margin: 0 auto 14px;
        }

        .action {
            min-height: 41px;

            display: inline-flex;
            align-items: center;
            justify-content: center;
            gap: 7px;

            padding: 0 14px;

            border: 0;
            border-radius: 11px;

            color: #ffffff;
            background: var(--primary);

            cursor: pointer;

            font-size: 10px;
            font-weight: 850;
            text-decoration: none;
        }

        .action.secondary {
            color: var(--primary);
            border: 1px solid #cbd8e4;
            background: #ffffff;
        }

        .sheet {
            width: 100%;
            max-width: 920px;
            min-height: 1125px;

            display: flex;
            flex-direction: column;

            margin: auto;
            padding: 38px 44px 29px;

            background: #ffffff;

            box-shadow: 0 30px 80px rgba(8, 57, 111, 0.16);
        }

        .top-line {
            height: 6px;

            margin: -38px -44px 23px;

            background: linear-gradient(
                90deg,
                var(--primary) 0 65%,
                var(--green) 65% 90%,
                #e8ad16 90%
            );
        }

        .header {
            display: flex;
            align-items: center;
            justify-content: space-between;
            gap: 20px;

            padding-bottom: 17px;

            border-bottom: 2px solid var(--primary);
        }

        .brand {
            min-width: 0;

            display: flex;
            align-items: center;
            gap: 14px;
        }

        .logo,
        .fallback {
            width: 70px;
            height: 70px;
            flex: 0 0 70px;
        }

        .logo {
            object-fit: contain;
        }

        .fallback {
            display: none;
            place-items: center;

            border-radius: 17px;

            color: var(--primary);
            background: var(--soft);

            font-size: 31px;
        }

        .government {
            color: var(--primary);

            font-size: 9px;
            font-weight: 900;
            letter-spacing: 0.7px;
            text-transform: uppercase;
        }

        .department {
            margin-top: 5px;

            font-size: 16px;
            font-weight: 900;
        }

        .subtitle {
            margin-top: 4px;

            color: var(--muted);

            font-size: 9px;
        }

        .document-code {
            flex: 0 0 auto;

            text-align: right;
        }

        .document-code span {
            display: block;

            color: var(--muted);

            font-size: 7px;
            font-weight: 850;
            text-transform: uppercase;
        }

        .document-code strong {
            display: block;

            margin-top: 4px;

            color: var(--primary);

            font-size: 16px;
        }

        h1 {
            margin: 20px 0 7px;

            text-align: center;

            font-size: 19px;
            letter-spacing: 0.3px;
        }

        .description {
            max-width: 750px;

            margin: 0 auto 13px;

            text-align: center;

            color: var(--muted);

            font-size: 8.5px;
            line-height: 1.58;
        }

        .status-wrap {
            text-align: center;
        }

        .status {
            display: inline-flex;
            align-items: center;
            gap: 7px;

            padding: 7px 11px;

            border-radius: 999px;

            font-size: 8px;
            font-weight: 900;
        }

        .status.progress {
            color: #8d5c00;
            background: #fff7e6;
        }

        .status.waiting {
            color: #086078;
            background: #e9f8fb;
        }

        .status.done {
            color: #086247;
            background: #e8f8f1;
        }

        .section {
            margin-top: 15px;
        }

        .section-title {
            display: flex;
            align-items: center;
            gap: 7px;

            margin-bottom: 7px;

            color: var(--primary);

            font-size: 8px;
            font-weight: 900;
            letter-spacing: 0.5px;
            text-transform: uppercase;
        }

        .grid {
            display: grid;
            grid-template-columns: repeat(2, minmax(0, 1fr));

            overflow: hidden;

            border: 1px solid var(--border);
            border-radius: 14px;
        }

        .field {
            min-height: 57px;

            padding: 10px 13px;

            border-right: 1px solid var(--border);
            border-bottom: 1px solid var(--border);
        }

        .field:nth-child(2n) {
            border-right: 0;
        }

        .field.last-row {
            border-bottom: 0;
        }

        .field.full {
            grid-column: 1 / -1;

            border-right: 0;
        }

        .field span {
            display: block;

            color: var(--muted);

            font-size: 6px;
            font-weight: 850;
            letter-spacing: 0.55px;
            text-transform: uppercase;
        }

        .field strong {
            display: block;

            margin-top: 5px;

            font-size: 9px;
            line-height: 1.35;

            word-break: break-word;
        }

        .narratives {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 11px;
        }

        .narrative {
            min-height: 148px;

            padding: 12px 13px;

            border: 1px solid var(--border);
            border-radius: 14px;

            background: var(--soft);
        }

        .narrative.solution {
            border-color: #bee5d7;
            background: #edf9f4;
        }

        .narrative-label {
            display: flex;
            align-items: center;
            gap: 6px;

            color: var(--primary);

            font-size: 7px;
            font-weight: 900;
            letter-spacing: 0.45px;
            text-transform: uppercase;
        }

        .narrative p {
            margin: 8px 0 0;

            color: #35465a;

            font-size: 8px;
            line-height: 1.55;
            text-align: justify;

            white-space: pre-line;
            overflow-wrap: anywhere;
        }

        .narrative.solution p {
            color: #145d48;
        }

        .declaration {
            margin-top: 16px;
            padding: 12px 14px;

            border: 1px solid var(--border);
            border-radius: 13px;

            background: var(--blue-soft);

            font-size: 8px;
            line-height: 1.65;
            text-align: justify;
        }

        .manual-fields {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 22px;

            margin-top: 18px;
        }

        .manual-field {
            padding-top: 18px;

            border-bottom: 1px solid #64748b;

            color: var(--muted);

            font-size: 7px;
        }

        .bottom {
            display: flex;
            flex: 1 1 auto;
            flex-direction: column;
            justify-content: flex-end;
        }

        .signatures {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 50px;

            margin-top: 58px;
        }

        .signature {
            text-align: center;
        }

        .signature-image {
            width: 100%;
            height: 58px;

            display: flex;
            align-items: flex-end;
            justify-content: center;

            margin-bottom: 5px;
        }

        .signature-image img {
            max-width: 230px;
            max-height: 55px;

            object-fit: contain;
        }

        .signature-line {
            padding-top: 7px;

            border-top: 1px solid #4b596b;

            font-size: 9px;
            font-weight: 800;
        }

        .signature small {
            display: block;

            margin-top: 4px;

            color: var(--muted);

            font-size: 7px;
        }

        .protocol {
            display: flex;
            justify-content: space-between;
            gap: 20px;

            margin-top: 34px;
            padding-top: 10px;

            border-top: 1px dashed #aab7c4;

            color: var(--muted);

            font-size: 7px;
            line-height: 1.45;
        }

        .protocol strong {
            color: var(--text);
        }

        .print-note {
            margin-top: 11px;

            text-align: center;

            color: var(--muted);

            font-size: 6px;
        }

        .sheet.medium .narrative p {
            font-size: 7.2px;
            line-height: 1.42;
        }

        .sheet.high .narrative {
            min-height: 128px;
        }

        .sheet.high .narrative p {
            font-size: 6.4px;
            line-height: 1.28;
        }

        .sheet.ultra .narrative {
            min-height: 112px;
        }

        .sheet.ultra .narrative p {
            font-size: 5.8px;
            line-height: 1.18;
        }

        @media (max-width: 700px) {
            body {
                padding: 0;

                background: #ffffff;
            }

            .actions {
                position: sticky;
                top: 0;
                z-index: 10;

                margin: 0;
                padding: 10px;

                border-bottom: 1px solid var(--border);

                background: #ffffff;
            }

            .sheet {
                min-height: 0;

                padding: 24px 17px;

                box-shadow: none;
            }

            .top-line {
                margin: -24px -17px 20px;
            }

            .header {
                align-items: flex-start;
            }

            .logo,
            .fallback {
                width: 54px;
                height: 54px;
                flex-basis: 54px;
            }

            .document-code strong {
                font-size: 13px;
            }

            .grid,
            .narratives,
            .manual-fields,
            .signatures {
                grid-template-columns: 1fr;
            }

            .field,
            .field:nth-child(2n) {
                border-right: 0;
            }

            .field.last-row {
                border-bottom: 1px solid var(--border);
            }

            .grid .field:last-child {
                border-bottom: 0;
            }

            .signatures {
                gap: 64px;
            }

            .protocol {
                flex-direction: column;
            }
        }

        @media print {
            @page {
                size: A4 portrait;
                margin: 7mm;
            }

            html,
            body {
                width: 100%;
                height: auto;

                margin: 0;
                padding: 0;

                background: #ffffff;
            }

            .actions,
            .print-note {
                display: none !important;
            }

            .sheet {
                width: 100%;
                max-width: none;
                height: 283mm;
                min-height: 283mm;

                margin: 0;
                padding: 0;

                overflow: hidden;

                box-shadow: none;
            }

            .top-line {
                height: 5px;

                margin: 0 0 13px;
            }

            .header {
                padding-bottom: 10px;
            }

            .logo,
            .fallback {
                width: 55px;
                height: 55px;
                flex-basis: 55px;
            }

            .government {
                font-size: 7px;
            }

            .department {
                margin-top: 3px;

                font-size: 13px;
            }

            .subtitle {
                margin-top: 2px;

                font-size: 7px;
            }

            .document-code span {
                font-size: 5px;
            }

            .document-code strong {
                margin-top: 2px;

                font-size: 13px;
            }

            h1 {
                margin: 12px 0 4px;

                font-size: 15px;
            }

            .description {
                margin-bottom: 8px;

                font-size: 6.7px;
                line-height: 1.42;
            }

            .status {
                padding: 5px 9px;

                font-size: 6.6px;
            }

            .section {
                margin-top: 10px;

                break-inside: avoid;
                page-break-inside: avoid;
            }

            .section-title {
                margin-bottom: 5px;

                font-size: 6.7px;
            }

            .field {
                min-height: 45px;

                padding: 7px 9px;
            }

            .field span {
                font-size: 4.8px;
            }

            .field strong {
                margin-top: 3px;

                font-size: 7.4px;
                line-height: 1.25;
            }

            .narratives {
                gap: 8px;
            }

            .narrative {
                min-height: 126px;

                padding: 8px 9px;
            }

            .narrative-label {
                font-size: 5.7px;
            }

            .narrative p {
                margin-top: 5px;

                font-size: 6.5px;
                line-height: 1.35;
            }

            .sheet.medium .narrative p {
                font-size: 6px;
                line-height: 1.28;
            }

            .sheet.high .narrative {
                min-height: 110px;
            }

            .sheet.high .narrative p {
                font-size: 5.5px;
                line-height: 1.18;
            }

            .sheet.ultra .narrative {
                min-height: 96px;
            }

            .sheet.ultra .narrative p {
                font-size: 5px;
                line-height: 1.1;
            }

            .declaration {
                margin-top: 9px;
                padding: 7px 9px;

                font-size: 6px;
                line-height: 1.38;
            }

            .manual-fields {
                gap: 16px;

                margin-top: 10px;
            }

            .manual-field {
                padding-top: 11px;

                font-size: 5px;
            }

            .signatures {
                gap: 42px;

                margin-top: auto;
                padding-top: 30px;

                break-inside: avoid;
                page-break-inside: avoid;
            }

            .signature-image {
                height: 40px;

                margin-bottom: 3px;
            }

            .signature-image img {
                max-height: 38px;
            }

            .signature-line {
                padding-top: 5px;

                font-size: 7px;
            }

            .signature small {
                margin-top: 3px;

                font-size: 5px;
            }

            .protocol {
                margin-top: 21px;
                padding-top: 7px;

                font-size: 5px;
                line-height: 1.3;

                break-inside: avoid;
                page-break-inside: avoid;
            }
        }
    </style>
</head>

<body>

<div class="actions">

    <a
        href="finalizar_os.php?id=<?= $id ?>"
        class="action secondary"
    >
        <i class="bi bi-arrow-left"></i>
        Voltar para a OS
    </a>

    <button
        type="button"
        class="action"
        onclick="window.print()"
    >
        <i class="bi bi-printer-fill"></i>
        Imprimir / Salvar PDF
    </button>

</div>

<main class="sheet <?= e($densidade) ?>">

    <div class="top-line"></div>

    <header class="header">

        <div class="brand">

            <img
                class="logo"
                src="assets/logo_pref.jpg"
                alt="Prefeitura de Extrema"
                onerror="
                    this.style.display='none';
                    this.nextElementSibling.style.display='grid';
                "
            >

            <div class="fallback">
                <i class="bi bi-buildings-fill"></i>
            </div>

            <div>

                <div class="government">
                    Prefeitura Municipal de Extrema
                </div>

                <div class="department">
                    Gerência de Tecnologia
                </div>

                <div class="subtitle">
                    Controle Institucional de Ordens de Serviço
                </div>

            </div>

        </div>

        <div class="document-code">

            <span>Número do termo</span>

            <strong><?= e($codigoDocumento) ?></strong>

            <span style="margin-top:7px">
                OS #<?= e($numeroOs) ?>
            </span>

        </div>

    </header>

    <h1>
        TERMO DE CONCLUSÃO TÉCNICA E ENTREGA DE EQUIPAMENTO
    </h1>

    <p class="description">
        Documento destinado à conferência do atendimento, comprovação da
        solução aplicada e coleta das assinaturas da Gerência de Tecnologia
        e do responsável pelo equipamento.
    </p>

    <div class="status-wrap">

        <span class="status <?= e($statusClass) ?>">

            <i class="bi <?= e($statusIcon) ?>"></i>

            <?= e($statusOriginal) ?>

        </span>

    </div>

    <section class="section">

        <div class="section-title">
            <i class="bi bi-person-badge-fill"></i>
            Identificação da solicitação
        </div>

        <div class="grid">

            <div class="field">
                <span>Solicitante</span>
                <strong><?= e($solicitante) ?></strong>
            </div>

            <div class="field">
                <span>Setor / unidade</span>
                <strong><?= e($setor) ?></strong>
            </div>

            <div class="field">
                <span>Telefone</span>
                <strong><?= e($telefone) ?></strong>
            </div>

            <div class="field">
                <span>Data de entrada</span>
                <strong><?= e($dataEntrada) ?></strong>
            </div>

            <div class="field last-row">
                <span>Prioridade</span>
                <strong><?= e($prioridade) ?></strong>
            </div>

            <div class="field last-row">
                <span>Prazo definido</span>
                <strong><?= $prazo ?> dia(s)</strong>
            </div>

        </div>

    </section>

    <section class="section">

        <div class="section-title">
            <i class="bi bi-pc-display-horizontal"></i>
            Identificação do equipamento
        </div>

        <div class="grid">

            <div class="field">
                <span>Tipo de equipamento</span>

                <strong>
                    <?= e(
                        $tipoEquipamento !== ''
                            ? $tipoEquipamento
                            : 'Não informado'
                    ) ?>
                </strong>
            </div>

            <div class="field">
                <span>Marca / modelo</span>

                <strong>
                    <?= e(
                        $marcaModelo !== ''
                            ? $marcaModelo
                            : 'Não informado'
                    ) ?>
                </strong>
            </div>

            <div class="field last-row">
                <span>Patrimônio</span>

                <strong>
                    <?= e(
                        $patrimonio !== ''
                            ? $patrimonio
                            : 'Não informado'
                    ) ?>
                </strong>
            </div>

            <div class="field last-row">
                <span>Número de série</span>

                <strong>
                    <?= e(
                        $numeroSerie !== ''
                            ? $numeroSerie
                            : 'Não informado'
                    ) ?>
                </strong>
            </div>

        </div>

    </section>

    <section class="section">

        <div class="section-title">
            <i class="bi bi-person-gear"></i>
            Atendimento técnico
        </div>

        <div class="grid">

            <div class="field">
                <span>Técnico responsável</span>

                <strong>
                    <?= e(
                        $tecnico !== ''
                            ? $tecnico
                            : 'Ainda não informado'
                    ) ?>
                </strong>
            </div>

            <div class="field">
                <span>Data de conclusão</span>
                <strong><?= e($dataConclusao) ?></strong>
            </div>

        </div>

    </section>

    <section class="section">

        <div class="section-title">
            <i class="bi bi-card-text"></i>
            Relato e solução aplicada
        </div>

        <div class="narratives">

            <div class="narrative">

                <div class="narrative-label">
                    <i class="bi bi-exclamation-diamond-fill"></i>
                    Problema informado
                </div>

                <p><?= e(
                    $problema !== ''
                        ? $problema
                        : 'Nenhum problema foi descrito.'
                ) ?></p>

            </div>

            <div class="narrative solution">

                <div class="narrative-label">
                    <i class="bi bi-check-circle-fill"></i>
                    Solução aplicada
                </div>

                <p><?= e(
                    $solucao !== ''
                        ? $solucao
                        : 'A solução técnica ainda não foi registrada.'
                ) ?></p>

            </div>

        </div>

    </section>

    <div class="declaration">
        <?= e($declaracao) ?>
        Ao assinar, as partes confirmam que os dados foram conferidos e que
        eventuais ressalvas foram registradas antes da entrega ou retirada.
    </div>

    <div class="manual-fields">

        <div class="manual-field">
            Data da entrega/retirada: ______ / ______ / __________
        </div>

        <div class="manual-field">
            Horário: ______ : ______
        </div>

    </div>

    <div class="bottom">

        <section class="signatures">

            <div class="signature">

                <?php if ($assinatura !== ''): ?>

                    <div class="signature-image">
                        <img
                            src="<?= e($assinatura) ?>"
                            alt="Assinatura digital do técnico"
                        >
                    </div>

                <?php else: ?>

                    <div class="signature-image"></div>

                <?php endif; ?>

                <div class="signature-line">
                    <?= e(
                        $tecnico !== ''
                            ? $tecnico
                            : 'Técnico responsável'
                    ) ?>
                </div>

                <small>
                    Gerência de Tecnologia - assinatura
                </small>

            </div>

            <div class="signature">

                <div class="signature-image"></div>

                <div class="signature-line">
                    <?= e($solicitante) ?>
                </div>

                <small>
                    Responsável pelo equipamento - assinatura
                </small>

            </div>

        </section>

        <div class="protocol">

            <div>
                <strong>Ordem de serviço:</strong>
                <?= e($numeroOs) ?><br>

                <strong>Termo:</strong>
                <?= e($codigoDocumento) ?>
            </div>

            <div style="text-align:right">
                <strong>Entrada:</strong>
                <?= e($dataEntrada) ?><br>

                <strong>Conclusão:</strong>
                <?= e($dataConclusao) ?>
            </div>

        </div>

        <div class="print-note">
            Clique em “Imprimir / Salvar PDF” e selecione “Salvar como PDF”
            no navegador.
        </div>

    </div>

</main>

<script>
function ajustarFolha() {
    const folha = document.querySelector('.sheet');

    if (!folha) {
        return;
    }

    folha.style.zoom = '1';

    let escala = 1;
    let tentativas = 0;

    while (
        folha.scrollHeight > folha.clientHeight + 3 &&
        escala > 0.80 &&
        tentativas < 12
    ) {
        escala -= 0.02;
        folha.style.zoom = String(escala);
        tentativas++;
    }
}

window.addEventListener('beforeprint', ajustarFolha);

<?php if ($autoPrint): ?>

window.addEventListener('load', () => {
    ajustarFolha();

    setTimeout(() => {
        window.print();
    }, 450);
});

<?php endif; ?>
</script>

</body>
</html>
