<?php
declare(strict_types=1);

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

date_default_timezone_set('America/Sao_Paulo');

telecomExigirAcesso();

$usuarioEhCynthia = telecomEhCynthia();

if (!$mysqli instanceof mysqli) {
    http_response_code(500);
    exit('Conexão com o banco indisponível.');
}

$mysqli->set_charset('utf8mb4');

try {
    telecomGarantirEstrutura($mysqli);
} catch (Throwable $excecao) {
    http_response_code(500);
    exit(telecomE($excecao->getMessage()));
}

$csrf = telecomCsrf();

if (isset($_GET['export']) && $_GET['export'] === 'csv') {
    header('Content-Type: text/csv; charset=UTF-8');
    header(
        'Content-Disposition: attachment; filename="controle_chips_' .
        date('Y-m-d_H-i') .
        '.csv"'
    );

    echo "\xEF\xBB\xBF";

    $arquivo = fopen('php://output', 'wb');

    fputcsv($arquivo, [
        'Código interno',
        'Número da linha',
        'ICCID',
        'Operadora',
        'Plano',
        'Pacote de dados',
        'Status',
        'Responsável',
        'Matrícula',
        'Cargo',
        'Setor',
        'Smartphone',
        'Data da entrega',
        'Data da devolução',
        'Observações'
    ], ';');

    $resultado = $mysqli->query("
        SELECT
            c.*,
            CONCAT_WS(
                ' • ',
                NULLIF(TRIM(CONCAT(s.marca, ' ', s.modelo)), ''),
                IF(
                    s.patrimonio IS NULL OR s.patrimonio = '',
                    NULL,
                    CONCAT('Pat. ', s.patrimonio)
                )
            ) AS smartphone
        FROM telecom_chips AS c
        LEFT JOIN telecom_smartphones AS s
            ON s.id = c.smartphone_id
        ORDER BY c.id DESC
    ");

    if ($resultado) {
        while ($linha = $resultado->fetch_assoc()) {
            fputcsv($arquivo, [
                $linha['codigo_interno'],
                $linha['numero_linha'],
                $linha['iccid'],
                $linha['operadora'],
                $linha['plano'],
                $linha['pacote_dados'],
                $linha['status'],
                $linha['responsavel_nome'],
                $linha['responsavel_matricula'],
                $linha['responsavel_cargo'],
                $linha['setor'],
                $linha['smartphone'],
                $linha['data_entrega'],
                $linha['data_devolucao'],
                $linha['observacoes']
            ], ';');
        }
    }

    fclose($arquivo);
    exit;
}

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

        $acao = telecomTexto($_POST['acao'] ?? '', 30);
        $usuario = telecomUsuarioAtual();

        if ($acao === 'salvar') {
            $id = (int) ($_POST['id'] ?? 0);

            $numero = telecomNulo(
                $_POST['numero_linha'] ?? '',
                30
            );

            $iccid = telecomNulo(
                $_POST['iccid'] ?? '',
                40
            );

            $operadora = telecomTexto(
                $_POST['operadora'] ?? 'Não informada',
                50
            );

            $plano = telecomNulo(
                $_POST['plano'] ?? '',
                120
            );

            $pacote = telecomNulo(
                $_POST['pacote_dados'] ?? '',
                80
            );

            $responsavel = telecomNulo(
                $_POST['responsavel_nome'] ?? '',
                150
            );

            $matricula = telecomNulo(
                $_POST['responsavel_matricula'] ?? '',
                50
            );

            $cargo = telecomNulo(
                $_POST['responsavel_cargo'] ?? '',
                120
            );

            $setor = telecomNulo(
                $_POST['setor'] ?? '',
                150
            );

            $observacoes = telecomNulo(
                $_POST['observacoes'] ?? '',
                4000
            );

            if (
                ($responsavel === null && $setor !== null) ||
                ($responsavel !== null && $setor === null)
            ) {
                throw new RuntimeException(
                    'Informe o nome e o setor da pessoa, ou deixe os dois campos vazios.'
                );
            }

            $possuiResponsavel =
                $responsavel !== null &&
                $setor !== null;

            $status = strtoupper(
                telecomTexto(
                    $_POST['status'] ?? 'SEM_IDENTIFICACAO',
                    30
                )
            );

            $permitidos = [
                'DISPONIVEL',
                'EM_USO',
                'BLOQUEADO',
                'EXTRAVIADO',
                'CANCELADO',
                'SEM_IDENTIFICACAO'
            ];

            if (!in_array($status, $permitidos, true)) {
                $status = 'SEM_IDENTIFICACAO';
            }

            if (
                $numero === null &&
                $iccid === null &&
                $status !== 'SEM_IDENTIFICACAO'
            ) {
                throw new RuntimeException(
                    'Sem número e sem ICCID, mantenha o status como Sem identificação.'
                );
            }

            if (
                $possuiResponsavel &&
                in_array(
                    $status,
                    ['DISPONIVEL', 'EM_USO', 'SEM_IDENTIFICACAO'],
                    true
                )
            ) {
                $status = 'EM_USO';
            }

            if (!$possuiResponsavel && $status === 'EM_USO') {
                $status = ($numero !== null || $iccid !== null)
                    ? 'DISPONIVEL'
                    : 'SEM_IDENTIFICACAO';
            }

            $mysqli->begin_transaction();

            if ($id > 0) {
                $stmt = $mysqli->prepare("
                    SELECT *
                    FROM telecom_chips
                    WHERE id = ?
                    FOR UPDATE
                ");

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

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

                if (!$anterior) {
                    throw new RuntimeException('Chip não encontrado.');
                }

                $smartphoneId = (int) (
                    $anterior['smartphone_id'] ?? 0
                );

                if (!$possuiResponsavel && $smartphoneId > 0) {
                    $stmt = $mysqli->prepare("
                        UPDATE telecom_smartphones
                        SET chip_id = NULL
                        WHERE id = ?
                          AND chip_id = ?
                    ");

                    $stmt->bind_param(
                        'ii',
                        $smartphoneId,
                        $id
                    );

                    $stmt->execute();
                    $stmt->close();

                    $smartphoneId = 0;
                } elseif (
                    $possuiResponsavel &&
                    $smartphoneId > 0
                ) {
                    $stmt = $mysqli->prepare("
                        UPDATE telecom_smartphones
                        SET
                            responsavel_nome = ?,
                            responsavel_matricula = ?,
                            responsavel_cargo = ?,
                            setor = ?,
                            status = 'EM_USO',
                            data_entrega = COALESCE(
                                data_entrega,
                                NOW()
                            ),
                            data_devolucao = NULL,
                            atualizado_por = ?
                        WHERE id = ?
                    ");

                    $stmt->bind_param(
                        'sssssi',
                        $responsavel,
                        $matricula,
                        $cargo,
                        $setor,
                        $usuario,
                        $smartphoneId
                    );

                    $stmt->execute();
                    $stmt->close();
                }

                $dataEntrega = $possuiResponsavel
                    ? (
                        $anterior['data_entrega'] ??
                        date('Y-m-d H:i:s')
                    )
                    : null;

                $dataDevolucao = (
                    !$possuiResponsavel &&
                    !empty($anterior['responsavel_nome'])
                )
                    ? date('Y-m-d H:i:s')
                    : ($anterior['data_devolucao'] ?? null);

                $stmt = $mysqli->prepare("
                    UPDATE telecom_chips
                    SET
                        numero_linha = ?,
                        iccid = ?,
                        operadora = ?,
                        plano = ?,
                        pacote_dados = ?,
                        status = ?,
                        responsavel_nome = ?,
                        responsavel_matricula = ?,
                        responsavel_cargo = ?,
                        setor = ?,
                        smartphone_id = NULLIF(?, 0),
                        data_entrega = ?,
                        data_devolucao = ?,
                        observacoes = ?,
                        atualizado_por = ?
                    WHERE id = ?
                ");

                $stmt->bind_param(
                    'ssssssssssissssi',
                    $numero,
                    $iccid,
                    $operadora,
                    $plano,
                    $pacote,
                    $status,
                    $responsavel,
                    $matricula,
                    $cargo,
                    $setor,
                    $smartphoneId,
                    $dataEntrega,
                    $dataDevolucao,
                    $observacoes,
                    $usuario,
                    $id
                );

                if (!$stmt->execute()) {
                    $erro = $stmt->error;
                    $stmt->close();

                    throw new RuntimeException(
                        'Não foi possível atualizar o chip: ' .
                        $erro
                    );
                }

                $stmt->close();

                $mudouResponsavel =
                    telecomNormalizar(
                        (string) (
                            $anterior['responsavel_nome'] ?? ''
                        )
                    ) !== telecomNormalizar(
                        (string) ($responsavel ?? '')
                    ) ||
                    telecomNormalizar(
                        (string) ($anterior['setor'] ?? '')
                    ) !== telecomNormalizar(
                        (string) ($setor ?? '')
                    );

                if ($mudouResponsavel) {
                    if (
                        empty($anterior['responsavel_nome']) &&
                        $possuiResponsavel
                    ) {
                        $acaoHistorico = 'ENTREGUE';
                    } elseif (
                        !empty($anterior['responsavel_nome']) &&
                        $possuiResponsavel
                    ) {
                        $acaoHistorico = 'TRANSFERIDO';
                    } else {
                        $acaoHistorico = 'RESPONSAVEL_REMOVIDO';
                    }
                } else {
                    $acaoHistorico = 'CADASTRO_ATUALIZADO';
                }

                telecomRegistrarHistorico(
                    $mysqli,
                    'CHIP',
                    $id,
                    $acaoHistorico,
                    $anterior['status'],
                    $status,
                    $anterior['responsavel_nome'],
                    $responsavel,
                    $anterior['setor'],
                    $setor,
                    $mudouResponsavel
                        ? 'Responsável e setor alterados pelo cadastro principal.'
                        : 'Dados cadastrais atualizados.'
                );

                $mensagem = $acaoHistorico === 'TRANSFERIDO'
                    ? 'Chip editado e transferido para o novo responsável.'
                    : 'Chip atualizado com sucesso.';
            } else {
                $codigo = telecomCodigo('CHIP');
                $dataEntrega = $possuiResponsavel
                    ? date('Y-m-d H:i:s')
                    : null;

                $stmt = $mysqli->prepare("
                    INSERT INTO telecom_chips (
                        codigo_interno,
                        numero_linha,
                        iccid,
                        operadora,
                        plano,
                        pacote_dados,
                        status,
                        responsavel_nome,
                        responsavel_matricula,
                        responsavel_cargo,
                        setor,
                        data_entrega,
                        observacoes,
                        criado_por,
                        atualizado_por
                    )
                    VALUES (
                        ?, ?, ?, ?, ?, ?, ?, ?,
                        ?, ?, ?, ?, ?, ?, ?
                    )
                ");

                $stmt->bind_param(
                    'sssssssssssssss',
                    $codigo,
                    $numero,
                    $iccid,
                    $operadora,
                    $plano,
                    $pacote,
                    $status,
                    $responsavel,
                    $matricula,
                    $cargo,
                    $setor,
                    $dataEntrega,
                    $observacoes,
                    $usuario,
                    $usuario
                );

                if (!$stmt->execute()) {
                    $erro = $stmt->error;
                    $stmt->close();

                    throw new RuntimeException(
                        'Não foi possível cadastrar o chip: ' .
                        $erro
                    );
                }

                $id = (int) $stmt->insert_id;
                $stmt->close();

                telecomRegistrarHistorico(
                    $mysqli,
                    'CHIP',
                    $id,
                    $possuiResponsavel
                        ? 'ENTREGUE'
                        : 'CADASTRADO',
                    null,
                    $status,
                    null,
                    $responsavel,
                    null,
                    $setor,
                    $possuiResponsavel
                        ? 'Chip cadastrado já com responsável e setor.'
                        : 'Chip incluído no levantamento.'
                );

                $mensagem = $possuiResponsavel
                    ? 'Chip cadastrado e entregue ao responsável.'
                    : 'Chip cadastrado com sucesso.';
            }

            $mysqli->commit();
            telecomFlash('sucesso', $mensagem);
            telecomRedirecionar('chips.php');
        }

        if ($acao === 'vincular') {
            $id = (int) ($_POST['id'] ?? 0);

            $responsavel = telecomTexto(
                $_POST['responsavel_nome'] ?? '',
                150
            );

            $matricula = telecomNulo(
                $_POST['responsavel_matricula'] ?? '',
                50
            );

            $cargo = telecomNulo(
                $_POST['responsavel_cargo'] ?? '',
                120
            );

            $setor = telecomTexto(
                $_POST['setor'] ?? '',
                150
            );

            $smartphoneId = (int) (
                $_POST['smartphone_id'] ?? 0
            );

            $detalhes = telecomNulo(
                $_POST['detalhes'] ?? '',
                2000
            );

            if ($id <= 0 || $responsavel === '' || $setor === '') {
                throw new RuntimeException(
                    'Informe o responsável e o setor.'
                );
            }

            $mysqli->begin_transaction();

            $stmt = $mysqli->prepare("
                SELECT *
                FROM telecom_chips
                WHERE id = ?
                FOR UPDATE
            ");

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

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

            if (!$anterior) {
                throw new RuntimeException('Chip não encontrado.');
            }

            if (!empty($anterior['smartphone_id'])) {
                $antigoSmartphone = (int) $anterior['smartphone_id'];

                $stmt = $mysqli->prepare("
                    UPDATE telecom_smartphones
                    SET chip_id = NULL
                    WHERE id = ?
                      AND chip_id = ?
                ");

                $stmt->bind_param('ii', $antigoSmartphone, $id);
                $stmt->execute();
                $stmt->close();
            }

            if ($smartphoneId > 0) {
                $stmt = $mysqli->prepare("
                    SELECT chip_id
                    FROM telecom_smartphones
                    WHERE id = ?
                    FOR UPDATE
                ");

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

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

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

                if (!empty($smartphone['chip_id'])) {
                    $chipAntigo = (int) $smartphone['chip_id'];

                    $stmt = $mysqli->prepare("
                        UPDATE telecom_chips
                        SET smartphone_id = NULL
                        WHERE id = ?
                    ");

                    $stmt->bind_param('i', $chipAntigo);
                    $stmt->execute();
                    $stmt->close();
                }

                $stmt = $mysqli->prepare("
                    UPDATE telecom_smartphones
                    SET
                        chip_id = ?,
                        responsavel_nome = ?,
                        responsavel_matricula = ?,
                        responsavel_cargo = ?,
                        setor = ?,
                        status = 'EM_USO',
                        data_entrega = COALESCE(data_entrega, NOW()),
                        data_devolucao = NULL,
                        atualizado_por = ?
                    WHERE id = ?
                ");

                $stmt->bind_param(
                    'isssssi',
                    $id,
                    $responsavel,
                    $matricula,
                    $cargo,
                    $setor,
                    $usuario,
                    $smartphoneId
                );

                $stmt->execute();
                $stmt->close();
            }

            $stmt = $mysqli->prepare("
                UPDATE telecom_chips
                SET
                    status = 'EM_USO',
                    responsavel_nome = ?,
                    responsavel_matricula = ?,
                    responsavel_cargo = ?,
                    setor = ?,
                    smartphone_id = NULLIF(?, 0),
                    data_entrega = NOW(),
                    data_devolucao = NULL,
                    atualizado_por = ?
                WHERE id = ?
            ");

            $stmt->bind_param(
                'ssssisi',
                $responsavel,
                $matricula,
                $cargo,
                $setor,
                $smartphoneId,
                $usuario,
                $id
            );

            if (!$stmt->execute()) {
                $erro = $stmt->error;
                $stmt->close();
                throw new RuntimeException(
                    'Não foi possível vincular o chip: ' . $erro
                );
            }

            $stmt->close();

            telecomRegistrarHistorico(
                $mysqli,
                'CHIP',
                $id,
                empty($anterior['responsavel_nome'])
                    ? 'ENTREGUE'
                    : 'TRANSFERIDO',
                $anterior['status'],
                'EM_USO',
                $anterior['responsavel_nome'],
                $responsavel,
                $anterior['setor'],
                $setor,
                $detalhes
            );

            $mysqli->commit();

            telecomFlash(
                'sucesso',
                'Responsável e localização do chip atualizados.'
            );

            telecomRedirecionar('chips.php');
        }

        if ($acao === 'devolver') {
            $id = (int) ($_POST['id'] ?? 0);

            if ($id <= 0) {
                throw new RuntimeException('Chip inválido.');
            }

            $mysqli->begin_transaction();

            $stmt = $mysqli->prepare("
                SELECT *
                FROM telecom_chips
                WHERE id = ?
                FOR UPDATE
            ");

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

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

            if (!$anterior) {
                throw new RuntimeException('Chip não encontrado.');
            }

            $stmt = $mysqli->prepare("
                UPDATE telecom_smartphones
                SET chip_id = NULL
                WHERE chip_id = ?
            ");

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

            $stmt = $mysqli->prepare("
                UPDATE telecom_chips
                SET
                    status = 'DISPONIVEL',
                    responsavel_nome = NULL,
                    responsavel_matricula = NULL,
                    responsavel_cargo = NULL,
                    setor = NULL,
                    smartphone_id = NULL,
                    data_devolucao = NOW(),
                    atualizado_por = ?
                WHERE id = ?
            ");

            $stmt->bind_param('si', $usuario, $id);
            $stmt->execute();
            $stmt->close();

            telecomRegistrarHistorico(
                $mysqli,
                'CHIP',
                $id,
                'DEVOLVIDO',
                $anterior['status'],
                'DISPONIVEL',
                $anterior['responsavel_nome'],
                null,
                $anterior['setor'],
                null,
                'Chip devolvido à Gerência de Tecnologia.'
            );

            $mysqli->commit();

            telecomFlash(
                'sucesso',
                'Devolução registrada e vínculo com aparelho removido.'
            );

            telecomRedirecionar('chips.php');
        }

        if ($acao === 'status') {
            $id = (int) ($_POST['id'] ?? 0);

            $novoStatus = strtoupper(
                telecomTexto(
                    $_POST['novo_status'] ?? '',
                    30
                )
            );

            $permitidos = [
                'DISPONIVEL',
                'BLOQUEADO',
                'EXTRAVIADO',
                'CANCELADO',
                'SEM_IDENTIFICACAO'
            ];

            if (
                $id <= 0 ||
                !in_array($novoStatus, $permitidos, true)
            ) {
                throw new RuntimeException('Situação inválida.');
            }

            $mysqli->begin_transaction();

            $stmt = $mysqli->prepare("
                SELECT *
                FROM telecom_chips
                WHERE id = ?
                FOR UPDATE
            ");

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

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

            if (!$anterior) {
                throw new RuntimeException('Chip não encontrado.');
            }

            $limpar = in_array(
                $novoStatus,
                ['DISPONIVEL', 'CANCELADO'],
                true
            );

            if ($limpar) {
                $stmt = $mysqli->prepare("
                    UPDATE telecom_smartphones
                    SET chip_id = NULL
                    WHERE chip_id = ?
                ");

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

                $stmt = $mysqli->prepare("
                    UPDATE telecom_chips
                    SET
                        status = ?,
                        responsavel_nome = NULL,
                        responsavel_matricula = NULL,
                        responsavel_cargo = NULL,
                        setor = NULL,
                        smartphone_id = NULL,
                        data_devolucao = NOW(),
                        atualizado_por = ?
                    WHERE id = ?
                ");
            } else {
                $stmt = $mysqli->prepare("
                    UPDATE telecom_chips
                    SET
                        status = ?,
                        atualizado_por = ?
                    WHERE id = ?
                ");
            }

            $stmt->bind_param(
                'ssi',
                $novoStatus,
                $usuario,
                $id
            );

            $stmt->execute();
            $stmt->close();

            telecomRegistrarHistorico(
                $mysqli,
                'CHIP',
                $id,
                'STATUS_ALTERADO',
                $anterior['status'],
                $novoStatus,
                $anterior['responsavel_nome'],
                $limpar ? null : $anterior['responsavel_nome'],
                $anterior['setor'],
                $limpar ? null : $anterior['setor'],
                'Situação alterada manualmente.'
            );

            $mysqli->commit();

            telecomFlash('sucesso', 'Situação do chip atualizada.');
            telecomRedirecionar('chips.php');
        }

        throw new RuntimeException('Ação não reconhecida.');
    } catch (Throwable $excecao) {
        try {
            $mysqli->rollback();
        } catch (Throwable) {
        }

        telecomFlash('erro', $excecao->getMessage());
        telecomRedirecionar('chips.php');
    }
}

$flash = telecomConsumirFlash();

$chips = [];
$resultado = $mysqli->query("
    SELECT
        c.*,
        s.codigo_interno AS smartphone_codigo,
        s.patrimonio AS smartphone_patrimonio,
        s.marca AS smartphone_marca,
        s.modelo AS smartphone_modelo
    FROM telecom_chips AS c
    LEFT JOIN telecom_smartphones AS s
        ON s.id = c.smartphone_id
    ORDER BY
        FIELD(
            c.status,
            'EXTRAVIADO',
            'BLOQUEADO',
            'SEM_IDENTIFICACAO',
            'EM_USO',
            'DISPONIVEL',
            'CANCELADO'
        ),
        c.id DESC
");

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

    $resultado->free();
}

$smartphones = [];
$resultado = $mysqli->query("
    SELECT
        id,
        codigo_interno,
        patrimonio,
        marca,
        modelo,
        responsavel_nome,
        chip_id,
        status
    FROM telecom_smartphones
    WHERE status <> 'BAIXADO'
    ORDER BY marca, modelo, patrimonio, codigo_interno
");

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

    $resultado->free();
}

$total = count($chips);
$emUso = 0;
$disponiveis = 0;
$problemas = 0;
$semIdentificacao = 0;

foreach ($chips as $chip) {
    $status = strtoupper((string) $chip['status']);

    $emUso += $status === 'EM_USO' ? 1 : 0;
    $disponiveis += $status === 'DISPONIVEL' ? 1 : 0;

    $problemas += in_array(
        $status,
        ['BLOQUEADO', 'EXTRAVIADO', 'CANCELADO'],
        true
    ) ? 1 : 0;

    $semIdentificacao += (
        $status === 'SEM_IDENTIFICACAO' ||
        empty($chip['numero_linha'])
    ) ? 1 : 0;
}
?>
<!doctype html>
<html lang="pt-BR">
<head>
    <meta charset="utf-8">
    <meta
        name="viewport"
        content="width=device-width,initial-scale=1,viewport-fit=cover"
    >
    <meta name="theme-color" content="#08396f">
    <title>Controle de Chips | Manutenção TI</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@5.3.3/dist/css/bootstrap.min.css"
        rel="stylesheet"
    >

    <link
        href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css"
        rel="stylesheet"
    >

    <link href="telecom_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="Prefeitura de Extrema"
                    >
                </div>

                <div>
                    <span class="eyebrow">
                        <i class="bi bi-shield-lock-fill"></i>
                        Acesso exclusivo • Cynthia e Renan
                    </span>

                    <h1 class="header-title">
                        Controle de Chips Móveis
                    </h1>

                    <p class="header-subtitle">
                        Linhas corporativas, responsáveis, setores,
                        aparelhos vinculados e histórico de movimentações.
                    </p>
                </div>
            </div>

            <nav class="header-actions">

                <?php if ($usuarioEhCynthia): ?>
                    <a
                        href="dashboard_cynthia.php"
                        class="header-button"
                    >
                        <i class="bi bi-grid-1x2-fill"></i>
                        Meu painel
                    </a>
                <?php else: ?>
                    <a
                        href="listar_os.php"
                        class="header-button"
                    >
                        <i class="bi bi-arrow-left-circle-fill"></i>
                        Ordens de serviço
                    </a>
                <?php endif; ?>

                <a href="smartphones.php" class="header-button primary">
                    <i class="bi bi-phone-fill"></i>
                    Smartphones
                </a>

                <a href="tonner.php" class="header-button">
                    <i class="bi bi-printer-fill"></i>
                    Toner
                </a>

                <a href="?export=csv" class="header-button">
                    <i class="bi bi-filetype-csv"></i>
                    Exportar CSV
                </a>

                <a href="logout.php" class="header-button">
                    <i class="bi bi-box-arrow-right"></i>
                    Sair
                </a>
            </nav>

        </div>
    </header>

    <main class="main">

        <?php if ($flash): ?>
            <div class="flash <?= $flash['tipo'] === 'sucesso' ? 'success' : 'error' ?>">
                <i class="bi <?= $flash['tipo'] === 'sucesso'
                    ? 'bi-check-circle-fill'
                    : 'bi-exclamation-triangle-fill' ?>"></i>
                <span><?= telecomE($flash['mensagem']) ?></span>
            </div>
        <?php endif; ?>

        <section class="hero">
            <div>
                <h2>
                    Descubra
                    <span>quem está com cada linha móvel.</span>
                </h2>

                <p>
                    Cadastre até mesmo chips sem número conhecido.
                    O sistema gera um código interno, registra o servidor,
                    matrícula, cargo, setor, aparelho utilizado e mantém
                    todas as entregas, transferências e devoluções.
                </p>

                <div class="hero-tags">
                    <span class="hero-tag">
                        <i class="bi bi-sim-fill"></i>
                        Linha e ICCID
                    </span>

                    <span class="hero-tag">
                        <i class="bi bi-person-vcard-fill"></i>
                        Responsável identificado
                    </span>

                    <span class="hero-tag">
                        <i class="bi bi-arrow-left-right"></i>
                        Transferência rastreável
                    </span>

                    <span class="hero-tag">
                        <i class="bi bi-clock-history"></i>
                        Histórico permanente
                    </span>
                </div>
            </div>

            <aside class="hero-side">
                <small>Usuário conectado</small>
                <strong><?= telecomE(telecomUsuarioAtual()) ?></strong>
                <span>
                    Todas as alterações ficam ligadas ao usuário
                    que realizou a operação.
                </span>
            </aside>
        </section>

        <section class="kpis">
            <article class="kpi">
                <div class="kpi-icon"><i class="bi bi-sim-fill"></i></div>
                <strong><?= $total ?></strong>
                <span>Total de chips</span>
            </article>

            <article class="kpi green">
                <div class="kpi-icon"><i class="bi bi-person-check-fill"></i></div>
                <strong><?= $emUso ?></strong>
                <span>Em uso</span>
            </article>

            <article class="kpi">
                <div class="kpi-icon"><i class="bi bi-check-circle-fill"></i></div>
                <strong><?= $disponiveis ?></strong>
                <span>Disponíveis</span>
            </article>

            <article class="kpi red">
                <div class="kpi-icon"><i class="bi bi-exclamation-octagon-fill"></i></div>
                <strong><?= $problemas ?></strong>
                <span>Bloqueados, perdidos ou cancelados</span>
            </article>

            <article class="kpi gold">
                <div class="kpi-icon"><i class="bi bi-question-circle-fill"></i></div>
                <strong><?= $semIdentificacao ?></strong>
                <span>Sem número identificado</span>
            </article>
        </section>

        <section class="panel">
            <div class="panel-head">
                <div class="panel-title">
                    <span class="panel-title-icon">
                        <i class="bi bi-list-check"></i>
                    </span>

                    <div>
                        <h3>Chips e linhas cadastradas</h3>
                        <p>
                            Pesquise, vincule, transfira, devolva
                            e consulte o histórico.
                        </p>
                    </div>
                </div>

                <button
                    type="button"
                    class="primary-button"
                    data-bs-toggle="modal"
                    data-bs-target="#modalCadastro"
                    onclick="novoCadastro()"
                >
                    <i class="bi bi-plus-circle-fill"></i>
                    Cadastrar chip
                </button>
            </div>

            <div class="filters">
                <div class="field">
                    <i class="bi bi-search"></i>
                    <input
                        type="search"
                        id="searchInput"
                        class="control"
                        placeholder="Linha, ICCID, código, responsável, setor, operadora ou aparelho..."
                        autocomplete="off"
                    >
                </div>

                <select id="statusFilter" class="control">
                    <option value="">Todos os status</option>
                    <option value="SEM_IDENTIFICACAO">Sem identificação</option>
                    <option value="DISPONIVEL">Disponível</option>
                    <option value="EM_USO">Em uso</option>
                    <option value="BLOQUEADO">Bloqueado</option>
                    <option value="EXTRAVIADO">Extraviado</option>
                    <option value="CANCELADO">Cancelado</option>
                </select>

                <button
                    type="button"
                    class="clear-button"
                    id="clearFilters"
                >
                    <i class="bi bi-arrow-counterclockwise"></i>
                    Limpar
                </button>
            </div>

            <div class="table-wrap">
                <table class="data-table" id="itemsTable">
                    <thead>
                        <tr>
                            <th>Chip / linha</th>
                            <th>Operadora</th>
                            <th>Responsável</th>
                            <th>Setor</th>
                            <th>Smartphone</th>
                            <th>Entrega</th>
                            <th>Status</th>
                            <th style="text-align:right;">Ações</th>
                        </tr>
                    </thead>

                    <tbody>
                    <?php foreach ($chips as $chip): ?>
                        <?php
                        [$statusRotulo, $statusClasse, $statusIcone] =
                            telecomStatusChip((string) $chip['status']);

                        $smartphone = trim(
                            implode(
                                ' • ',
                                array_filter([
                                    trim(
                                        (string) ($chip['smartphone_marca'] ?? '') .
                                        ' ' .
                                        (string) ($chip['smartphone_modelo'] ?? '')
                                    ),
                                    !empty($chip['smartphone_patrimonio'])
                                        ? 'Pat. ' . $chip['smartphone_patrimonio']
                                        : '',
                                    $chip['smartphone_codigo'] ?? ''
                                ])
                            )
                        );

                        $busca = telecomNormalizar(
                            implode(' ', [
                                $chip['codigo_interno'],
                                $chip['numero_linha'],
                                $chip['iccid'],
                                $chip['operadora'],
                                $chip['plano'],
                                $chip['responsavel_nome'],
                                $chip['responsavel_matricula'],
                                $chip['responsavel_cargo'],
                                $chip['setor'],
                                $smartphone,
                                $statusRotulo
                            ])
                        );

                        $dadosCadastro = [
                            'id' => (int) $chip['id'],
                            'numero_linha' => $chip['numero_linha'],
                            'iccid' => $chip['iccid'],
                            'operadora' => $chip['operadora'],
                            'plano' => $chip['plano'],
                            'pacote_dados' => $chip['pacote_dados'],
                            'status' => $chip['status'],
                            'responsavel_nome' => $chip['responsavel_nome'],
                            'responsavel_matricula' => $chip['responsavel_matricula'],
                            'responsavel_cargo' => $chip['responsavel_cargo'],
                            'setor' => $chip['setor'],
                            'observacoes' => $chip['observacoes']
                        ];

                        $dadosVinculo = [
                            'id' => (int) $chip['id'],
                            'rotulo' => $chip['numero_linha']
                                ?: $chip['codigo_interno'],
                            'responsavel_nome' => $chip['responsavel_nome'],
                            'responsavel_matricula' => $chip['responsavel_matricula'],
                            'responsavel_cargo' => $chip['responsavel_cargo'],
                            'setor' => $chip['setor'],
                            'smartphone_id' => $chip['smartphone_id']
                        ];
                        ?>
                        <tr
                            class="data-row"
                            data-search="<?= telecomE($busca) ?>"
                            data-status="<?= telecomE($chip['status']) ?>"
                        >
                            <td data-label="Chip / linha">
                                <div class="item-main">
                                    <span class="item-icon">
                                        <i class="bi bi-sim-fill"></i>
                                    </span>

                                    <span>
                                        <strong>
                                            <?= telecomE(
                                                $chip['numero_linha']
                                                    ?: 'Número não identificado'
                                            ) ?>
                                        </strong>

                                        <small>
                                            <?= telecomE($chip['codigo_interno']) ?>
                                            • ICCID:
                                            <?= telecomE(
                                                $chip['iccid']
                                                    ?: 'não informado'
                                            ) ?>
                                        </small>
                                    </span>
                                </div>
                            </td>

                            <td data-label="Operadora">
                                <span class="cell-main">
                                    <?= telecomE($chip['operadora']) ?>
                                </span>

                                <span class="cell-sub">
                                    <?= telecomE(
                                        trim(
                                            implode(
                                                ' • ',
                                                array_filter([
                                                    $chip['plano'],
                                                    $chip['pacote_dados']
                                                ])
                                            )
                                        ) ?: 'Plano não informado'
                                    ) ?>
                                </span>
                            </td>

                            <td data-label="Responsável">
                                <span class="cell-main">
                                    <?= telecomE(
                                        $chip['responsavel_nome']
                                            ?: 'Sem responsável'
                                    ) ?>
                                </span>

                                <span class="cell-sub">
                                    <?= telecomE(
                                        $chip['responsavel_matricula']
                                            ? 'Matrícula: ' .
                                              $chip['responsavel_matricula']
                                            : 'Matrícula não informada'
                                    ) ?>
                                </span>
                            </td>

                            <td data-label="Setor">
                                <span class="cell-main">
                                    <?= telecomE(
                                        $chip['setor']
                                            ?: 'Não informado'
                                    ) ?>
                                </span>

                                <span class="cell-sub">
                                    <?= telecomE(
                                        $chip['responsavel_cargo']
                                            ?: 'Cargo não informado'
                                    ) ?>
                                </span>
                            </td>

                            <td data-label="Smartphone">
                                <span class="cell-main">
                                    <?= telecomE(
                                        $smartphone
                                            ?: 'Nenhum aparelho vinculado'
                                    ) ?>
                                </span>
                            </td>

                            <td data-label="Entrega">
                                <span class="cell-main">
                                    <?= telecomE(
                                        telecomData($chip['data_entrega'])
                                    ) ?>
                                </span>
                            </td>

                            <td data-label="Status">
                                <span class="status <?= telecomE($statusClasse) ?>">
                                    <i class="bi <?= telecomE($statusIcone) ?>"></i>
                                    <?= telecomE($statusRotulo) ?>
                                </span>
                            </td>

                            <td data-label="Ações">
                                <div class="actions">
                                    <button
                                        type="button"
                                        class="action"
                                        onclick='editarCadastro(<?= json_encode(
                                            $dadosCadastro,
                                            JSON_HEX_TAG |
                                            JSON_HEX_APOS |
                                            JSON_HEX_QUOT |
                                            JSON_HEX_AMP
                                        ) ?>)'
                                    >
                                        <i class="bi bi-pencil-fill"></i>
                                        Editar
                                    </button>

                                    <button
                                        type="button"
                                        class="action green"
                                        onclick='abrirVinculo(<?= json_encode(
                                            $dadosVinculo,
                                            JSON_HEX_TAG |
                                            JSON_HEX_APOS |
                                            JSON_HEX_QUOT |
                                            JSON_HEX_AMP
                                        ) ?>)'
                                    >
                                        <i class="bi bi-arrow-left-right"></i>
                                        <?= empty($chip['responsavel_nome'])
                                            ? 'Entregar'
                                            : 'Transferir' ?>
                                    </button>

                                    <?php if (
                                        $chip['status'] === 'EM_USO' ||
                                        !empty($chip['responsavel_nome'])
                                    ): ?>
                                        <button
                                            type="button"
                                            class="action gold"
                                            onclick='abrirDevolucao(
                                                <?= (int) $chip['id'] ?>,
                                                <?= json_encode(
                                                    $chip['numero_linha']
                                                        ?: $chip['codigo_interno'],
                                                    JSON_HEX_TAG |
                                                    JSON_HEX_APOS |
                                                    JSON_HEX_QUOT |
                                                    JSON_HEX_AMP
                                                ) ?>
                                            )'
                                        >
                                            <i class="bi bi-box-arrow-in-left"></i>
                                            Devolver
                                        </button>
                                    <?php endif; ?>

                                    <button
                                        type="button"
                                        class="action purple"
                                        onclick='abrirHistorico(
                                            "CHIP",
                                            <?= (int) $chip['id'] ?>,
                                            <?= json_encode(
                                                $chip['numero_linha']
                                                    ?: $chip['codigo_interno'],
                                                JSON_HEX_TAG |
                                                JSON_HEX_APOS |
                                                JSON_HEX_QUOT |
                                                JSON_HEX_AMP
                                            ) ?>
                                        )'
                                    >
                                        <i class="bi bi-clock-history"></i>
                                        Histórico
                                    </button>

                                    <button
                                        type="button"
                                        class="action red"
                                        onclick='abrirStatus(
                                            <?= (int) $chip['id'] ?>,
                                            <?= json_encode(
                                                $chip['numero_linha']
                                                    ?: $chip['codigo_interno'],
                                                JSON_HEX_TAG |
                                                JSON_HEX_APOS |
                                                JSON_HEX_QUOT |
                                                JSON_HEX_AMP
                                            ) ?>,
                                            <?= json_encode(
                                                $chip['status'],
                                                JSON_HEX_TAG |
                                                JSON_HEX_APOS |
                                                JSON_HEX_QUOT |
                                                JSON_HEX_AMP
                                            ) ?>
                                        )'
                                    >
                                        <i class="bi bi-exclamation-triangle-fill"></i>
                                        Situação
                                    </button>
                                </div>
                            </td>
                        </tr>
                    <?php endforeach; ?>

                    <?php if (!$chips): ?>
                        <tr>
                            <td colspan="8">
                                <div class="empty">
                                    <i class="bi bi-sim"></i>
                                    <strong>Nenhum chip cadastrado</strong>
                                    <span>
                                        Comece o levantamento pelos chips
                                        encontrados fisicamente.
                                    </span>
                                </div>
                            </td>
                        </tr>
                    <?php endif; ?>

                        <tr id="filteredEmpty" style="display:none;">
                            <td colspan="8">
                                <div class="empty">
                                    <i class="bi bi-search"></i>
                                    <strong>Nenhum resultado encontrado</strong>
                                    <span>Altere a pesquisa ou os filtros.</span>
                                </div>
                            </td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </section>

        <footer class="page-footer">
            <span>
                Prefeitura de Extrema • Gerência de Tecnologia<br>
                Controle interno de telecomunicações móveis.
            </span>

            <span>
                <i class="bi bi-shield-lock-fill"></i>
                Acesso: Cynthia e Renan
            </span>
        </footer>
    </main>
</div>

<!-- Cadastro -->
<div class="modal fade" id="modalCadastro" tabindex="-1">
    <div class="modal-dialog modal-lg modal-dialog-centered modal-dialog-scrollable">
        <form method="post" class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="cadastroTitulo">
                    <i class="bi bi-sim-fill me-2"></i>
                    Cadastrar chip
                </h5>

                <button
                    type="button"
                    class="btn-close btn-close-white"
                    data-bs-dismiss="modal"
                ></button>
            </div>

            <div class="modal-body">
                <input type="hidden" name="acao" value="salvar">
                <input type="hidden" name="id" id="cadastroId">
                <input
                    type="hidden"
                    name="csrf_token"
                    value="<?= telecomE($csrf) ?>"
                >

                <div class="form-grid">
                    <div class="form-group">
                        <label for="numeroLinha">Número da linha</label>
                        <input
                            type="text"
                            name="numero_linha"
                            id="numeroLinha"
                            class="control"
                            maxlength="30"
                            placeholder="Ex.: (35) 99999-9999"
                        >
                    </div>

                    <div class="form-group">
                        <label for="iccid">ICCID do chip</label>
                        <input
                            type="text"
                            name="iccid"
                            id="iccid"
                            class="control"
                            maxlength="40"
                            placeholder="Código impresso no chip"
                        >
                    </div>

                    <div class="form-group">
                        <label for="operadora">Operadora</label>
                        <select
                            name="operadora"
                            id="operadora"
                            class="control"
                        >
                            <option value="Não informada">Não informada</option>
                            <option value="Claro">Claro</option>
                            <option value="Vivo">Vivo</option>
                            <option value="TIM">TIM</option>
                            <option value="Algar">Algar</option>
                            <option value="Outra">Outra</option>
                        </select>
                    </div>

                    <div class="form-group">
                        <label for="statusCadastro">Situação</label>
                        <select
                            name="status"
                            id="statusCadastro"
                            class="control"
                        >
                            <option value="SEM_IDENTIFICACAO">
                                Sem identificação
                            </option>
                            <option value="DISPONIVEL">Disponível</option>
                            <option value="EM_USO">Em uso</option>
                            <option value="BLOQUEADO">Bloqueado</option>
                            <option value="EXTRAVIADO">Extraviado</option>
                            <option value="CANCELADO">Cancelado</option>
                        </select>
                    </div>

                    <div class="form-group">
                        <label for="plano">Plano / contrato</label>
                        <input
                            type="text"
                            name="plano"
                            id="plano"
                            class="control"
                            maxlength="120"
                        >
                    </div>

                    <div class="form-group">
                        <label for="pacoteDados">Pacote de dados</label>
                        <input
                            type="text"
                            name="pacote_dados"
                            id="pacoteDados"
                            class="control"
                            maxlength="80"
                            placeholder="Ex.: 20 GB + ligações"
                        >
                    </div>

                    <div class="form-group full">
                        <div class="responsible-form-notice">
                            <strong>
                                <i class="bi bi-person-vcard-fill"></i>
                                Pessoa que está com o chip
                            </strong>

                            <span>
                                Informe nome e setor para cadastrar o chip já
                                em uso. Ao editar e trocar esses dados, o sistema
                                registra automaticamente uma transferência.
                            </span>
                        </div>
                    </div>

                    <div class="form-group">
                        <label for="cadastroResponsavelNome">
                            Nome da pessoa
                        </label>

                        <input
                            type="text"
                            name="responsavel_nome"
                            id="cadastroResponsavelNome"
                            class="control"
                            maxlength="150"
                            placeholder="Nome completo"
                        >
                    </div>

                    <div class="form-group">
                        <label for="cadastroSetor">
                            Setor da pessoa
                        </label>

                        <input
                            type="text"
                            name="setor"
                            id="cadastroSetor"
                            class="control"
                            maxlength="150"
                            placeholder="Secretaria, gerência ou departamento"
                        >
                    </div>

                    <div class="form-group">
                        <label for="cadastroMatricula">Matrícula</label>

                        <input
                            type="text"
                            name="responsavel_matricula"
                            id="cadastroMatricula"
                            class="control"
                            maxlength="50"
                        >
                    </div>

                    <div class="form-group">
                        <label for="cadastroCargo">Cargo / função</label>

                        <input
                            type="text"
                            name="responsavel_cargo"
                            id="cadastroCargo"
                            class="control"
                            maxlength="120"
                        >
                    </div>

                    <div class="form-group full">
                        <label for="observacoes">
                            Observações
                        </label>

                        <textarea
                            name="observacoes"
                            id="observacoes"
                            class="control"
                            placeholder="Contrato, procedência, localização física ou outras informações..."
                        ></textarea>
                    </div>
                </div>
            </div>

            <div class="modal-footer">
                <button
                    type="button"
                    class="modal-button"
                    data-bs-dismiss="modal"
                >
                    Cancelar
                </button>

                <button type="submit" class="modal-button primary">
                    <i class="bi bi-check-circle-fill"></i>
                    Salvar chip
                </button>
            </div>
        </form>
    </div>
</div>

<!-- Vincular -->
<div class="modal fade" id="modalVinculo" tabindex="-1">
    <div class="modal-dialog modal-lg modal-dialog-centered modal-dialog-scrollable">
        <form method="post" class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title">
                    <i class="bi bi-person-vcard-fill me-2"></i>
                    Entregar ou transferir chip
                </h5>

                <button
                    type="button"
                    class="btn-close btn-close-white"
                    data-bs-dismiss="modal"
                ></button>
            </div>

            <div class="modal-body">
                <input type="hidden" name="acao" value="vincular">
                <input type="hidden" name="id" id="vinculoId">
                <input
                    type="hidden"
                    name="csrf_token"
                    value="<?= telecomE($csrf) ?>"
                >

                <div class="flash success">
                    <i class="bi bi-sim-fill"></i>
                    <span id="vinculoRotulo">Chip selecionado</span>
                </div>

                <div class="form-grid">
                    <div class="form-group">
                        <label for="responsavelNome">
                            Nome do responsável
                        </label>

                        <input
                            type="text"
                            name="responsavel_nome"
                            id="responsavelNome"
                            class="control"
                            maxlength="150"
                            required
                        >
                    </div>

                    <div class="form-group">
                        <label for="responsavelMatricula">
                            Matrícula
                        </label>

                        <input
                            type="text"
                            name="responsavel_matricula"
                            id="responsavelMatricula"
                            class="control"
                            maxlength="50"
                        >
                    </div>

                    <div class="form-group">
                        <label for="responsavelCargo">
                            Cargo / função
                        </label>

                        <input
                            type="text"
                            name="responsavel_cargo"
                            id="responsavelCargo"
                            class="control"
                            maxlength="120"
                        >
                    </div>

                    <div class="form-group">
                        <label for="responsavelSetor">Setor</label>

                        <input
                            type="text"
                            name="setor"
                            id="responsavelSetor"
                            class="control"
                            maxlength="150"
                            required
                        >
                    </div>

                    <div class="form-group full">
                        <label for="smartphoneId">
                            Smartphone utilizado
                        </label>

                        <select
                            name="smartphone_id"
                            id="smartphoneId"
                            class="control"
                        >
                            <option value="">
                                Nenhum aparelho vinculado
                            </option>

                            <?php foreach ($smartphones as $smartphone): ?>
                                <option value="<?= (int) $smartphone['id'] ?>">
                                    <?= telecomE(
                                        trim(
                                            implode(
                                                ' • ',
                                                array_filter([
                                                    trim(
                                                        $smartphone['marca'] .
                                                        ' ' .
                                                        $smartphone['modelo']
                                                    ),
                                                    $smartphone['patrimonio']
                                                        ? 'Pat. ' .
                                                          $smartphone['patrimonio']
                                                        : '',
                                                    $smartphone['codigo_interno'],
                                                    $smartphone['responsavel_nome']
                                                        ? 'Atual: ' .
                                                          $smartphone['responsavel_nome']
                                                        : ''
                                                ])
                                            )
                                        )
                                    ) ?>
                                </option>
                            <?php endforeach; ?>
                        </select>

                        <span class="form-help">
                            O aparelho receberá o mesmo responsável e setor.
                        </span>
                    </div>

                    <div class="form-group full">
                        <label for="detalhesVinculo">
                            Observação da entrega ou transferência
                        </label>

                        <textarea
                            name="detalhes"
                            id="detalhesVinculo"
                            class="control"
                        ></textarea>
                    </div>
                </div>
            </div>

            <div class="modal-footer">
                <button
                    type="button"
                    class="modal-button"
                    data-bs-dismiss="modal"
                >
                    Cancelar
                </button>

                <button type="submit" class="modal-button primary">
                    <i class="bi bi-person-check-fill"></i>
                    Confirmar entrega / transferência
                </button>
            </div>
        </form>
    </div>
</div>

<!-- Devolução -->
<div class="modal fade" id="modalDevolucao" tabindex="-1">
    <div class="modal-dialog modal-dialog-centered">
        <form method="post" class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title">
                    <i class="bi bi-box-arrow-in-left me-2"></i>
                    Registrar devolução
                </h5>

                <button
                    type="button"
                    class="btn-close btn-close-white"
                    data-bs-dismiss="modal"
                ></button>
            </div>

            <div class="modal-body">
                <input type="hidden" name="acao" value="devolver">
                <input type="hidden" name="id" id="devolucaoId">
                <input
                    type="hidden"
                    name="csrf_token"
                    value="<?= telecomE($csrf) ?>"
                >

                <p style="font-size:10px;line-height:1.6;">
                    Confirmar a devolução de
                    <strong id="devolucaoRotulo"></strong>?
                    O responsável e o smartphone serão removidos,
                    mantendo todo o histórico.
                </p>
            </div>

            <div class="modal-footer">
                <button
                    type="button"
                    class="modal-button"
                    data-bs-dismiss="modal"
                >
                    Cancelar
                </button>

                <button type="submit" class="modal-button primary">
                    Confirmar devolução
                </button>
            </div>
        </form>
    </div>
</div>

<!-- Status -->
<div class="modal fade" id="modalStatus" tabindex="-1">
    <div class="modal-dialog modal-dialog-centered">
        <form method="post" class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title">
                    <i class="bi bi-exclamation-triangle-fill me-2"></i>
                    Alterar situação
                </h5>

                <button
                    type="button"
                    class="btn-close btn-close-white"
                    data-bs-dismiss="modal"
                ></button>
            </div>

            <div class="modal-body">
                <input type="hidden" name="acao" value="status">
                <input type="hidden" name="id" id="statusId">
                <input
                    type="hidden"
                    name="csrf_token"
                    value="<?= telecomE($csrf) ?>"
                >

                <div class="form-group">
                    <label id="statusRotulo">Chip selecionado</label>

                    <select
                        name="novo_status"
                        id="novoStatus"
                        class="control"
                        required
                    >
                        <option value="SEM_IDENTIFICACAO">
                            Sem identificação
                        </option>
                        <option value="DISPONIVEL">Disponível</option>
                        <option value="BLOQUEADO">Bloqueado</option>
                        <option value="EXTRAVIADO">Extraviado</option>
                        <option value="CANCELADO">Cancelado</option>
                    </select>
                </div>
            </div>

            <div class="modal-footer">
                <button
                    type="button"
                    class="modal-button"
                    data-bs-dismiss="modal"
                >
                    Cancelar
                </button>

                <button type="submit" class="modal-button danger">
                    Atualizar situação
                </button>
            </div>
        </form>
    </div>
</div>

<!-- Histórico -->
<div class="modal fade" id="modalHistorico" tabindex="-1">
    <div class="modal-dialog modal-lg modal-dialog-centered modal-dialog-scrollable">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="historicoTitulo">
                    <i class="bi bi-clock-history me-2"></i>
                    Histórico
                </h5>

                <button
                    type="button"
                    class="btn-close btn-close-white"
                    data-bs-dismiss="modal"
                ></button>
            </div>

            <div class="modal-body" id="historicoConteudo">
                Carregando...
            </div>
        </div>
    </div>
</div>

<script
    src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"
></script>

<script>
const modais = {
    cadastro: bootstrap.Modal.getOrCreateInstance(
        document.getElementById('modalCadastro')
    ),
    vinculo: bootstrap.Modal.getOrCreateInstance(
        document.getElementById('modalVinculo')
    ),
    devolucao: bootstrap.Modal.getOrCreateInstance(
        document.getElementById('modalDevolucao')
    ),
    status: bootstrap.Modal.getOrCreateInstance(
        document.getElementById('modalStatus')
    ),
    historico: bootstrap.Modal.getOrCreateInstance(
        document.getElementById('modalHistorico')
    )
};

function novoCadastro() {
    document.getElementById('cadastroTitulo').innerHTML =
        '<i class="bi bi-sim-fill me-2"></i>Cadastrar chip';

    document.getElementById('cadastroId').value = '';
    document.getElementById('numeroLinha').value = '';
    document.getElementById('iccid').value = '';
    document.getElementById('operadora').value = 'Não informada';
    document.getElementById('plano').value = '';
    document.getElementById('pacoteDados').value = '';
    document.getElementById('statusCadastro').value =
        'SEM_IDENTIFICACAO';

    document.getElementById('cadastroResponsavelNome').value = '';
    document.getElementById('cadastroSetor').value = '';
    document.getElementById('cadastroMatricula').value = '';
    document.getElementById('cadastroCargo').value = '';
    document.getElementById('observacoes').value = '';
}

function editarCadastro(item) {
    document.getElementById('cadastroTitulo').innerHTML =
        '<i class="bi bi-pencil-fill me-2"></i>Editar chip';

    document.getElementById('cadastroId').value =
        item.id || '';

    document.getElementById('numeroLinha').value =
        item.numero_linha || '';

    document.getElementById('iccid').value =
        item.iccid || '';

    document.getElementById('operadora').value =
        item.operadora || 'Não informada';

    document.getElementById('plano').value =
        item.plano || '';

    document.getElementById('pacoteDados').value =
        item.pacote_dados || '';

    document.getElementById('statusCadastro').value =
        item.status || 'SEM_IDENTIFICACAO';

    document.getElementById('cadastroResponsavelNome').value =
        item.responsavel_nome || '';

    document.getElementById('cadastroSetor').value =
        item.setor || '';

    document.getElementById('cadastroMatricula').value =
        item.responsavel_matricula || '';

    document.getElementById('cadastroCargo').value =
        item.responsavel_cargo || '';

    document.getElementById('observacoes').value =
        item.observacoes || '';

    modais.cadastro.show();
}

function abrirVinculo(item) {
    document.getElementById('vinculoId').value = item.id;
    document.getElementById('vinculoRotulo').textContent =
        `Chip: ${item.rotulo}`;

    document.getElementById('responsavelNome').value =
        item.responsavel_nome || '';

    document.getElementById('responsavelMatricula').value =
        item.responsavel_matricula || '';

    document.getElementById('responsavelCargo').value =
        item.responsavel_cargo || '';

    document.getElementById('responsavelSetor').value =
        item.setor || '';

    document.getElementById('smartphoneId').value =
        item.smartphone_id || '';

    document.getElementById('detalhesVinculo').value = '';

    modais.vinculo.show();
}

function abrirDevolucao(id, rotulo) {
    document.getElementById('devolucaoId').value = id;
    document.getElementById('devolucaoRotulo').textContent =
        rotulo;

    modais.devolucao.show();
}

function abrirStatus(id, rotulo, status) {
    document.getElementById('statusId').value = id;
    document.getElementById('statusRotulo').textContent =
        `Chip: ${rotulo}`;

    document.getElementById('novoStatus').value =
        status === 'EM_USO'
            ? 'DISPONIVEL'
            : status;

    modais.status.show();
}

async function abrirHistorico(tipo, id, rotulo) {
    document.getElementById('historicoTitulo').innerHTML =
        '<i class="bi bi-clock-history me-2"></i>' +
        `Histórico — ${escaparHtml(rotulo)}`;

    const conteudo = document.getElementById(
        'historicoConteudo'
    );

    conteudo.innerHTML = `
        <div class="empty">
            <div class="spinner-border text-primary"></div>
            <span>Carregando movimentações...</span>
        </div>
    `;

    modais.historico.show();

    try {
        const resposta = await fetch(
            `telecom_historico.php?tipo=${encodeURIComponent(tipo)}&id=${encodeURIComponent(id)}`,
            {
                credentials: 'same-origin',
                cache: 'no-store',
                headers: {
                    'X-Requested-With': 'XMLHttpRequest'
                }
            }
        );

        const html = await resposta.text();

        if (!resposta.ok) {
            throw new Error(html || 'Falha ao carregar histórico.');
        }

        conteudo.innerHTML = html;
    } catch (erro) {
        conteudo.innerHTML =
            `<div class="flash error">${escaparHtml(erro.message)}</div>`;
    }
}

function escaparHtml(valor) {
    const elemento = document.createElement('div');
    elemento.textContent = String(valor ?? '');
    return elemento.innerHTML;
}

const normalizar = valor => String(valor || '')
    .normalize('NFD')
    .replace(/[\u0300-\u036f]/g, '')
    .toLowerCase()
    .replace(/[^a-z0-9]+/g, '');

const searchInput = document.getElementById('searchInput');
const statusFilter = document.getElementById('statusFilter');
const filteredEmpty = document.getElementById('filteredEmpty');

function filtrar() {
    const termo = normalizar(searchInput.value);
    const status = statusFilter.value;

    const linhas = Array.from(
        document.querySelectorAll('#itemsTable tr.data-row')
    );

    let visiveis = 0;

    linhas.forEach(linha => {
        const correspondeTexto =
            termo === '' ||
            linha.dataset.search.includes(termo);

        const correspondeStatus =
            status === '' ||
            linha.dataset.status === status;

        const exibir =
            correspondeTexto && correspondeStatus;

        linha.style.display = exibir ? '' : 'none';

        if (exibir) {
            visiveis++;
        }
    });

    filteredEmpty.style.display =
        visiveis === 0 && linhas.length > 0
            ? ''
            : 'none';
}

searchInput.addEventListener('input', filtrar);
statusFilter.addEventListener('change', filtrar);

document
    .getElementById('clearFilters')
    .addEventListener('click', () => {
        searchInput.value = '';
        statusFilter.value = '';
        filtrar();
        searchInput.focus();
    });
</script>

</body>
</html>
