<?php
require 'auth.php';
require 'conexao.php';
require 'fpdf.php';

function txt($v) {
    return utf8_decode($v ?? '-');
}

function eData($data) {
    if (!$data) return '-';
    return date('d/m/Y H:i', strtotime($data));
}

$total = 0;
$andamento = 0;
$finalizadas = 0;
$pendente = 0;
$atrasadas = 0;

$resKpi = $mysqli->query("SELECT * FROM ordens_servico ORDER BY data_entrada DESC");
$rows = [];

while ($r = $resKpi->fetch_assoc()) {
    $rows[] = $r;
    $total++;

    if ($r['status'] === 'Finalizado') {
        $finalizadas++;
    } elseif ($r['status'] === 'PENDENTE RETIRADA') {
        $pendente++;
    } else {
        $andamento++;
    }

    if ($r['status'] !== 'Finalizado' && $r['status'] !== 'PENDENTE RETIRADA') {
        $dias = (time() - strtotime($r['data_entrada'])) / 86400;
        if ($dias > (int)$r['prazo']) {
            $atrasadas++;
        }
    }
}

class PDF extends FPDF {

    function Header() {
        $this->SetFillColor(15, 23, 42);
        $this->Rect(0, 0, 210, 34, 'F');

        $this->SetFillColor(37, 99, 235);
        $this->Rect(0, 30, 210, 4, 'F');

        if (file_exists('assets/logoazul.jpg')) {
            $this->Image('assets/logoazul.jpg', 12, 7, 20);
        }

        $this->SetTextColor(255, 255, 255);
        $this->SetFont('Arial', 'B', 14);
        $this->SetXY(38, 8);
        $this->Cell(160, 8, txt('RELATÓRIO DE ORDENS DE SERVIÇO'), 0, 1, 'L');

        $this->SetFont('Arial', '', 9);
        $this->SetX(38);
        $this->Cell(160, 5, txt('Manutenção de Hardware | Gerência de Tecnologia'), 0, 1, 'L');

        $this->SetX(38);
        $this->Cell(160, 5, txt('Gerado em ' . date('d/m/Y H:i')), 0, 1, 'L');

        $this->Ln(14);
    }

    function Footer() {
        $this->SetY(-17);
        $this->SetDrawColor(226, 232, 240);
        $this->Line(10, $this->GetY(), 200, $this->GetY());

        $this->SetFont('Arial', 'I', 8);
        $this->SetTextColor(100, 116, 139);
        $this->Ln(3);
        $this->Cell(0, 5, txt('Sistema de Manutenção TI - Prefeitura de Extrema'), 0, 1, 'C');
        $this->Cell(0, 5, txt('Desenvolvido por Renan Andrade | Página ') . $this->PageNo(), 0, 0, 'C');
    }

    function Section($title) {
        $this->Ln(3);
        $this->SetFillColor(239, 246, 255);
        $this->SetTextColor(30, 64, 175);
        $this->SetFont('Arial', 'B', 11);
        $this->Cell(0, 9, txt($title), 0, 1, 'L', true);
        $this->SetTextColor(15, 23, 42);
        $this->Ln(2);
    }

    function Kpi($x, $y, $w, $label, $value, $r, $g, $b) {
        $this->SetXY($x, $y);
        $this->SetFillColor(248, 250, 252);
        $this->SetDrawColor(226, 232, 240);
        $this->Rect($x, $y, $w, 25, 'DF');

        $this->SetXY($x + 4, $y + 4);
        $this->SetTextColor(100, 116, 139);
        $this->SetFont('Arial', 'B', 7);
        $this->Cell($w - 8, 5, txt($label), 0, 1);

        $this->SetXY($x + 4, $y + 11);
        $this->SetTextColor($r, $g, $b);
        $this->SetFont('Arial', 'B', 18);
        $this->Cell($w - 8, 9, txt($value), 0, 1);

        $this->SetTextColor(15, 23, 42);
    }

    function OsCard($r) {
        if ($this->GetY() > 245) {
            $this->AddPage();
        }

        $x = 10;
        $y = $this->GetY();
        $w = 190;
        $h = 42;

        $status = $r['status'] ?? '-';

        if ($status === 'Finalizado') {
            $sr = 22; $sg = 163; $sb = 74;
        } elseif ($status === 'PENDENTE RETIRADA') {
            $sr = 8; $sg = 145; $sb = 178;
        } else {
            $sr = 245; $sg = 158; $sb = 11;
        }

        $this->SetFillColor(255, 255, 255);
        $this->SetDrawColor(226, 232, 240);
        $this->Rect($x, $y, $w, $h, 'DF');

        $this->SetFillColor($sr, $sg, $sb);
        $this->Rect($x, $y, 4, $h, 'F');

        $this->SetXY($x + 8, $y + 5);
        $this->SetFont('Arial', 'B', 11);
        $this->SetTextColor(30, 64, 175);
        $this->Cell(72, 6, txt('OS: #' . ($r['numero_os'] ?? '-')), 0, 0);

        $this->SetFont('Arial', 'B', 8);
        $this->SetTextColor($sr, $sg, $sb);
        $this->Cell(45, 6, txt($status), 0, 0);

        $this->SetTextColor(100, 116, 139);
        $this->Cell(60, 6, txt(eData($r['data_entrada'] ?? null)), 0, 1, 'R');

        $this->SetXY($x + 8, $y + 14);
        $this->SetFont('Arial', 'B', 9);
        $this->SetTextColor(15, 23, 42);
        $this->Cell(90, 5, txt($r['nome_solicitante'] ?? '-'), 0, 0);

        $this->SetFont('Arial', '', 8);
        $this->SetTextColor(100, 116, 139);
        $this->Cell(92, 5, txt('Setor: ' . ($r['setor'] ?? '-')), 0, 1);

        $this->SetXY($x + 8, $y + 22);
        $this->SetFont('Arial', '', 8);
        $this->SetTextColor(51, 65, 85);
        $equip = ($r['tipo_equipamento'] ?? '-') . ' | ' . ($r['marca'] ?? '-') . ' | ' . ($r['modelo'] ?? '-');
        $this->Cell(120, 5, txt('Equipamento: ' . $equip), 0, 0);

        $this->Cell(62, 5, txt('Patrimônio: ' . ($r['patrimonio'] ?? '-')), 0, 1);

        $this->SetXY($x + 8, $y + 30);
        $this->SetFont('Arial', '', 8);
        $this->SetTextColor(71, 85, 105);

        $problema = $r['problema'] ?? '-';
        if (strlen($problema) > 120) {
            $problema = substr($problema, 0, 120) . '...';
        }

        $this->MultiCell(178, 4, txt('Problema: ' . $problema));

        $this->SetY($y + $h + 5);
    }
}

$pdf = new PDF();
$pdf->AddPage();
$pdf->SetAutoPageBreak(true, 22);

$pdf->Section('RESUMO DO RELATÓRIO');

$pdf->SetFont('Arial', '', 10);
$pdf->SetTextColor(51, 65, 85);
$pdf->MultiCell(0, 6, txt(
    'Este documento apresenta a relação geral das ordens de serviço registradas no sistema de manutenção de TI, incluindo status, solicitante, setor, equipamento, patrimônio e descrição resumida do problema.'
));

$pdf->Ln(3);

$pdf->Section('INDICADORES GERAIS');

$y = $pdf->GetY();

$pdf->Kpi(10,  $y, 36, 'TOTAL', $total, 37, 99, 235);
$pdf->Kpi(49,  $y, 36, 'ANDAMENTO', $andamento, 245, 158, 11);
$pdf->Kpi(88,  $y, 36, 'FINALIZADAS', $finalizadas, 22, 163, 74);
$pdf->Kpi(127, $y, 36, 'RETIRADA', $pendente, 8, 145, 178);
$pdf->Kpi(166, $y, 34, 'ATRASADAS', $atrasadas, 220, 38, 38);

$pdf->SetY($y + 33);

$pdf->Section('ORDENS DE SERVIÇO');

if (empty($rows)) {
    $pdf->SetFont('Arial', '', 10);
    $pdf->Cell(0, 8, txt('Nenhuma ordem de serviço encontrada.'), 0, 1);
} else {
    foreach ($rows as $r) {
        $pdf->OsCard($r);
    }
}

$pdf->Output('I', 'relatorio_ordens_servico.pdf');
exit;