<?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_smartphones_' .
        date('Y-m-d_H-i') .
        '.csv"'
    );

    echo "\xEF\xBB\xBF";

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

    fputcsv($arquivo, [
        'Código interno',
        'Patrimônio',
        'IMEI 1',
        'IMEI 2',
        'Número de série',
        'Marca',
        'Modelo',
        'Cor',
        'Armazenamento',
        'Sistema operacional',
        'Condição',
        'Status',
        'Responsável',
        'Matrícula',
        'Cargo',
        'Setor',
        'Linha vinculada',
        'Carregador',
        'Acessórios',
        'Data da entrega',
        'Data da devolução',
        'Observações'
    ], ';');

    $resultado = $mysqli->query("
        SELECT
            s.*,
            c.numero_linha
        FROM telecom_smartphones AS s
        LEFT JOIN telecom_chips AS c
            ON c.id = s.chip_id
        ORDER BY s.id DESC
    ");

    if ($resultado) {
        while ($linha = $resultado->fetch_assoc()) {
            fputcsv($arquivo, [
                $linha['codigo_interno'],
                $linha['patrimonio'],
                $linha['imei1'],
                $linha['imei2'],
                $linha['numero_serie'],
                $linha['marca'],
                $linha['modelo'],
                $linha['cor'],
                $linha['armazenamento'],
                $linha['sistema_operacional'],
                $linha['condicao_aparelho'],
                $linha['status'],
                $linha['responsavel_nome'],
                $linha['responsavel_matricula'],
                $linha['responsavel_cargo'],
                $linha['setor'],
                $linha['numero_linha'],
                (int) $linha['possui_carregador'] === 1
                    ? 'Sim'
                    : 'Não',
                $linha['acessorios'],
                $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);

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

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

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

            $numeroSerie = telecomNulo(
                $_POST['numero_serie'] ?? '',
                80
            );

            $marca = telecomTexto(
                $_POST['marca'] ?? '',
                80
            );

            $modelo = telecomTexto(
                $_POST['modelo'] ?? '',
                120
            );

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

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

            $sistema = telecomNulo(
                $_POST['sistema_operacional'] ?? '',
                80
            );

            $condicao = strtoupper(
                telecomTexto(
                    $_POST['condicao_aparelho'] ?? 'NAO_AVALIADO',
                    30
                )
            );

            $condicoesPermitidas = [
                'NAO_AVALIADO',
                'NOVO',
                'BOM',
                'REGULAR',
                'DANIFICADO'
            ];

            if (!in_array($condicao, $condicoesPermitidas, true)) {
                $condicao = 'NAO_AVALIADO';
            }

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

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

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

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

            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
                )
            );

            $statusPermitidos = [
                'DISPONIVEL',
                'EM_USO',
                'MANUTENCAO',
                'EXTRAVIADO',
                'BAIXADO',
                'SEM_IDENTIFICACAO'
            ];

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

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

            if (!$possuiResponsavel && $status === 'EM_USO') {
                $status = 'DISPONIVEL';
            }

            $possuiCarregador =
                !empty($_POST['possui_carregador']) ? 1 : 0;

            $acessorios = telecomNulo(
                $_POST['acessorios'] ?? '',
                3000
            );

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

            if ($marca === '') {
                $marca = 'Não identificada';
            }

            if ($modelo === '') {
                $modelo = 'Não identificado';
            }

            $mysqli->begin_transaction();

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

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

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

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

                $chipId = (int) ($anterior['chip_id'] ?? 0);

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

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

                    $chipId = 0;
                } elseif (
                    $possuiResponsavel &&
                    $chipId > 0
                ) {
                    $stmt = $mysqli->prepare("
                        UPDATE telecom_chips
                        SET
                            smartphone_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,
                        $chipId
                    );

                    $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_smartphones
                    SET
                        patrimonio = ?,
                        imei1 = ?,
                        imei2 = ?,
                        numero_serie = ?,
                        marca = ?,
                        modelo = ?,
                        cor = ?,
                        armazenamento = ?,
                        sistema_operacional = ?,
                        condicao_aparelho = ?,
                        status = ?,
                        responsavel_nome = ?,
                        responsavel_matricula = ?,
                        responsavel_cargo = ?,
                        setor = ?,
                        chip_id = NULLIF(?, 0),
                        possui_carregador = ?,
                        data_entrega = ?,
                        data_devolucao = ?,
                        acessorios = ?,
                        observacoes = ?,
                        atualizado_por = ?
                    WHERE id = ?
                ");

                $stmt->bind_param(
                    'sssssssssssssssiisssssi',
                    $patrimonio,
                    $imei1,
                    $imei2,
                    $numeroSerie,
                    $marca,
                    $modelo,
                    $cor,
                    $armazenamento,
                    $sistema,
                    $condicao,
                    $status,
                    $responsavel,
                    $matricula,
                    $cargo,
                    $setor,
                    $chipId,
                    $possuiCarregador,
                    $dataEntrega,
                    $dataDevolucao,
                    $acessorios,
                    $observacoes,
                    $usuario,
                    $id
                );

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

                    throw new RuntimeException(
                        'Não foi possível atualizar o smartphone: ' .
                        $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,
                    'SMARTPHONE',
                    $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'
                    ? 'Smartphone editado e transferido para o novo responsável.'
                    : 'Smartphone atualizado com sucesso.';
            } else {
                $codigo = telecomCodigo('CEL');
                $dataEntrega = $possuiResponsavel
                    ? date('Y-m-d H:i:s')
                    : null;

                $stmt = $mysqli->prepare("
                    INSERT INTO telecom_smartphones (
                        codigo_interno,
                        patrimonio,
                        imei1,
                        imei2,
                        numero_serie,
                        marca,
                        modelo,
                        cor,
                        armazenamento,
                        sistema_operacional,
                        condicao_aparelho,
                        status,
                        responsavel_nome,
                        responsavel_matricula,
                        responsavel_cargo,
                        setor,
                        possui_carregador,
                        data_entrega,
                        acessorios,
                        observacoes,
                        criado_por,
                        atualizado_por
                    )
                    VALUES (
                        ?, ?, ?, ?, ?, ?, ?, ?,
                        ?, ?, ?, ?, ?, ?, ?, ?,
                        ?, ?, ?, ?, ?, ?
                    )
                ");

                $stmt->bind_param(
                    'ssssssssssssssssisssss',
                    $codigo,
                    $patrimonio,
                    $imei1,
                    $imei2,
                    $numeroSerie,
                    $marca,
                    $modelo,
                    $cor,
                    $armazenamento,
                    $sistema,
                    $condicao,
                    $status,
                    $responsavel,
                    $matricula,
                    $cargo,
                    $setor,
                    $possuiCarregador,
                    $dataEntrega,
                    $acessorios,
                    $observacoes,
                    $usuario,
                    $usuario
                );

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

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

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

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

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

            $mysqli->commit();
            telecomFlash('sucesso', $mensagem);
            telecomRedirecionar('smartphones.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
            );

            $chipId = (int) ($_POST['chip_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_smartphones
                WHERE id = ?
                FOR UPDATE
            ");

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

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

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

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

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

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

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

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

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

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

                if (!empty($chip['smartphone_id'])) {
                    $smartphoneAntigo =
                        (int) $chip['smartphone_id'];

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

                    $stmt->bind_param(
                        'i',
                        $smartphoneAntigo
                    );

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

                $stmt = $mysqli->prepare("
                    UPDATE telecom_chips
                    SET
                        smartphone_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,
                    $chipId
                );

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

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

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

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

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

            $stmt->close();

            telecomRegistrarHistorico(
                $mysqli,
                'SMARTPHONE',
                $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, setor e linha do smartphone atualizados.'
            );

            telecomRedirecionar('smartphones.php');
        }

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

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

            $mysqli->begin_transaction();

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

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

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

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

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

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

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

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

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

            $mysqli->commit();

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

            telecomRedirecionar('smartphones.php');
        }

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

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

            $permitidos = [
                'DISPONIVEL',
                'MANUTENCAO',
                'EXTRAVIADO',
                'BAIXADO',
                '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_smartphones
                WHERE id = ?
                FOR UPDATE
            ");

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

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

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

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

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

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

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

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

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

            telecomRegistrarHistorico(
                $mysqli,
                'SMARTPHONE',
                $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 smartphone atualizada.'
            );

            telecomRedirecionar('smartphones.php');
        }

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

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

$flash = telecomConsumirFlash();

$smartphones = [];
$resultado = $mysqli->query("
    SELECT
        s.*,
        c.codigo_interno AS chip_codigo,
        c.numero_linha,
        c.operadora AS chip_operadora
    FROM telecom_smartphones AS s
    LEFT JOIN telecom_chips AS c
        ON c.id = s.chip_id
    ORDER BY
        FIELD(
            s.status,
            'EXTRAVIADO',
            'MANUTENCAO',
            'SEM_IDENTIFICACAO',
            'EM_USO',
            'DISPONIVEL',
            'BAIXADO'
        ),
        s.id DESC
");

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

    $resultado->free();
}

$chips = [];
$resultado = $mysqli->query("
    SELECT
        id,
        codigo_interno,
        numero_linha,
        iccid,
        operadora,
        responsavel_nome,
        smartphone_id,
        status
    FROM telecom_chips
    WHERE status <> 'CANCELADO'
    ORDER BY numero_linha, codigo_interno
");

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

    $resultado->free();
}

$total = count($smartphones);
$emUso = 0;
$disponiveis = 0;
$manutencao = 0;
$problemas = 0;

foreach ($smartphones as $smartphone) {
    $status = strtoupper((string) $smartphone['status']);

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

    $problemas += in_array(
        $status,
        ['EXTRAVIADO', 'BAIXADO'],
        true
    ) ? 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 Smartphones | 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 Smartphones
                    </h1>

                    <p class="header-subtitle">
                        Aparelhos corporativos, IMEI, patrimônio,
                        responsáveis, linhas e histórico completo.
                    </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="chips.php" class="header-button primary">
                    <i class="bi bi-sim-fill"></i>
                    Chips
                </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>
                    Localize cada aparelho,
                    <span>IMEI, linha e responsável.</span>
                </h2>

                <p>
                    Cadastre inclusive smartphones ainda sem patrimônio
                    ou IMEI conhecido. O sistema gera um código interno,
                    registra acessórios, condição física, chip utilizado
                    e todas as transferências entre servidores e setores.
                </p>

                <div class="hero-tags">
                    <span class="hero-tag">
                        <i class="bi bi-phone-fill"></i>
                        Inventário de aparelhos
                    </span>

                    <span class="hero-tag">
                        <i class="bi bi-upc-scan"></i>
                        IMEI e patrimônio
                    </span>

                    <span class="hero-tag">
                        <i class="bi bi-sim-fill"></i>
                        Linha vinculada
                    </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>
                    Entregas, transferências, devoluções e mudanças
                    de situação ficam registradas.
                </span>
            </aside>
        </section>

        <section class="kpis">
            <article class="kpi">
                <div class="kpi-icon"><i class="bi bi-phone-fill"></i></div>
                <strong><?= $total ?></strong>
                <span>Total de aparelhos</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 purple">
                <div class="kpi-icon"><i class="bi bi-tools"></i></div>
                <strong><?= $manutencao ?></strong>
                <span>Em manutenção</span>
            </article>

            <article class="kpi red">
                <div class="kpi-icon"><i class="bi bi-exclamation-octagon-fill"></i></div>
                <strong><?= $problemas ?></strong>
                <span>Extraviados ou baixados</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>Smartphones corporativos</h3>
                        <p>
                            Consulte, vincule, transfira, devolva
                            e acompanhe cada aparelho.
                        </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 smartphone
                </button>
            </div>

            <div class="filters">
                <div class="field">
                    <i class="bi bi-search"></i>
                    <input
                        type="search"
                        id="searchInput"
                        class="control"
                        placeholder="Código, patrimônio, IMEI, série, marca, modelo, responsável, setor ou linha..."
                        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="MANUTENCAO">Em manutenção</option>
                    <option value="EXTRAVIADO">Extraviado</option>
                    <option value="BAIXADO">Baixado</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>Aparelho</th>
                            <th>Identificação</th>
                            <th>Responsável</th>
                            <th>Setor</th>
                            <th>Linha vinculada</th>
                            <th>Condição</th>
                            <th>Status</th>
                            <th style="text-align:right;">Ações</th>
                        </tr>
                    </thead>

                    <tbody>
                    <?php foreach ($smartphones as $smartphone): ?>
                        <?php
                        [$statusRotulo, $statusClasse, $statusIcone] =
                            telecomStatusSmartphone(
                                (string) $smartphone['status']
                            );

                        $linhaChip = trim(
                            implode(
                                ' • ',
                                array_filter([
                                    $smartphone['numero_linha']
                                        ?: $smartphone['chip_codigo'],
                                    $smartphone['chip_operadora']
                                ])
                            )
                        );

                        $busca = telecomNormalizar(
                            implode(' ', [
                                $smartphone['codigo_interno'],
                                $smartphone['patrimonio'],
                                $smartphone['imei1'],
                                $smartphone['imei2'],
                                $smartphone['numero_serie'],
                                $smartphone['marca'],
                                $smartphone['modelo'],
                                $smartphone['cor'],
                                $smartphone['armazenamento'],
                                $smartphone['sistema_operacional'],
                                $smartphone['responsavel_nome'],
                                $smartphone['responsavel_matricula'],
                                $smartphone['responsavel_cargo'],
                                $smartphone['setor'],
                                $linhaChip,
                                $statusRotulo
                            ])
                        );

                        $dadosCadastro = [
                            'id' => (int) $smartphone['id'],
                            'patrimonio' => $smartphone['patrimonio'],
                            'imei1' => $smartphone['imei1'],
                            'imei2' => $smartphone['imei2'],
                            'numero_serie' => $smartphone['numero_serie'],
                            'marca' => $smartphone['marca'],
                            'modelo' => $smartphone['modelo'],
                            'cor' => $smartphone['cor'],
                            'armazenamento' => $smartphone['armazenamento'],
                            'sistema_operacional' => $smartphone['sistema_operacional'],
                            'condicao_aparelho' => $smartphone['condicao_aparelho'],
                            'status' => $smartphone['status'],
                            'responsavel_nome' => $smartphone['responsavel_nome'],
                            'responsavel_matricula' => $smartphone['responsavel_matricula'],
                            'responsavel_cargo' => $smartphone['responsavel_cargo'],
                            'setor' => $smartphone['setor'],
                            'possui_carregador' => (int) $smartphone['possui_carregador'],
                            'acessorios' => $smartphone['acessorios'],
                            'observacoes' => $smartphone['observacoes']
                        ];

                        $dadosVinculo = [
                            'id' => (int) $smartphone['id'],
                            'rotulo' => trim(
                                $smartphone['marca'] .
                                ' ' .
                                $smartphone['modelo']
                            ) .
                            ' • ' .
                            $smartphone['codigo_interno'],
                            'responsavel_nome' => $smartphone['responsavel_nome'],
                            'responsavel_matricula' => $smartphone['responsavel_matricula'],
                            'responsavel_cargo' => $smartphone['responsavel_cargo'],
                            'setor' => $smartphone['setor'],
                            'chip_id' => $smartphone['chip_id']
                        ];
                        ?>
                        <tr
                            class="data-row"
                            data-search="<?= telecomE($busca) ?>"
                            data-status="<?= telecomE($smartphone['status']) ?>"
                        >
                            <td data-label="Aparelho">
                                <div class="item-main">
                                    <span class="item-icon">
                                        <i class="bi bi-phone-fill"></i>
                                    </span>

                                    <span>
                                        <strong>
                                            <?= telecomE(
                                                trim(
                                                    $smartphone['marca'] .
                                                    ' ' .
                                                    $smartphone['modelo']
                                                )
                                            ) ?>
                                        </strong>

                                        <small>
                                            <?= telecomE($smartphone['codigo_interno']) ?>
                                            •
                                            <?= telecomE(
                                                trim(
                                                    implode(
                                                        ' • ',
                                                        array_filter([
                                                            $smartphone['cor'],
                                                            $smartphone['armazenamento'],
                                                            $smartphone['sistema_operacional']
                                                        ])
                                                    )
                                                ) ?: 'Características não informadas'
                                            ) ?>
                                        </small>
                                    </span>
                                </div>
                            </td>

                            <td data-label="Identificação">
                                <span class="cell-main">
                                    Patrimônio:
                                    <?= telecomE(
                                        $smartphone['patrimonio']
                                            ?: 'não informado'
                                    ) ?>
                                </span>

                                <span class="cell-sub">
                                    IMEI 1:
                                    <?= telecomE(
                                        $smartphone['imei1']
                                            ?: 'não informado'
                                    ) ?>
                                </span>

                                <span class="cell-sub">
                                    Série:
                                    <?= telecomE(
                                        $smartphone['numero_serie']
                                            ?: 'não informada'
                                    ) ?>
                                </span>
                            </td>

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

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

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

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

                            <td data-label="Linha vinculada">
                                <span class="cell-main">
                                    <?= telecomE(
                                        $linhaChip
                                            ?: 'Nenhum chip vinculado'
                                    ) ?>
                                </span>
                            </td>

                            <td data-label="Condição">
                                <span class="cell-main">
                                    <?= telecomE(
                                        ucwords(
                                            strtolower(
                                                str_replace(
                                                    '_',
                                                    ' ',
                                                    $smartphone['condicao_aparelho']
                                                )
                                            )
                                        )
                                    ) ?>
                                </span>

                                <span class="cell-sub">
                                    <?= (int) $smartphone['possui_carregador'] === 1
                                        ? 'Com carregador'
                                        : 'Sem carregador' ?>
                                </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($smartphone['responsavel_nome'])
                                            ? 'Entregar'
                                            : 'Transferir' ?>
                                    </button>

                                    <?php if (
                                        $smartphone['status'] === 'EM_USO' ||
                                        !empty($smartphone['responsavel_nome'])
                                    ): ?>
                                        <button
                                            type="button"
                                            class="action gold"
                                            onclick='abrirDevolucao(
                                                <?= (int) $smartphone['id'] ?>,
                                                <?= json_encode(
                                                    trim(
                                                        $smartphone['marca'] .
                                                        ' ' .
                                                        $smartphone['modelo']
                                                    ),
                                                    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(
                                            "SMARTPHONE",
                                            <?= (int) $smartphone['id'] ?>,
                                            <?= json_encode(
                                                trim(
                                                    $smartphone['marca'] .
                                                    ' ' .
                                                    $smartphone['modelo']
                                                ),
                                                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) $smartphone['id'] ?>,
                                            <?= json_encode(
                                                trim(
                                                    $smartphone['marca'] .
                                                    ' ' .
                                                    $smartphone['modelo']
                                                ),
                                                JSON_HEX_TAG |
                                                JSON_HEX_APOS |
                                                JSON_HEX_QUOT |
                                                JSON_HEX_AMP
                                            ) ?>,
                                            <?= json_encode(
                                                $smartphone['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 (!$smartphones): ?>
                        <tr>
                            <td colspan="8">
                                <div class="empty">
                                    <i class="bi bi-phone"></i>
                                    <strong>Nenhum smartphone cadastrado</strong>
                                    <span>
                                        Comece o levantamento pelos aparelhos
                                        encontrados e pelos servidores conhecidos.
                                    </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-xl 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-phone-fill me-2"></i>
                    Cadastrar smartphone
                </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="patrimonio">Patrimônio</label>
                        <input
                            type="text"
                            name="patrimonio"
                            id="patrimonio"
                            class="control"
                            maxlength="50"
                        >
                    </div>

                    <div class="form-group">
                        <label for="numeroSerie">Número de série</label>
                        <input
                            type="text"
                            name="numero_serie"
                            id="numeroSerie"
                            class="control"
                            maxlength="80"
                        >
                    </div>

                    <div class="form-group">
                        <label for="imei1">IMEI 1</label>
                        <input
                            type="text"
                            name="imei1"
                            id="imei1"
                            class="control"
                            maxlength="30"
                        >
                    </div>

                    <div class="form-group">
                        <label for="imei2">IMEI 2</label>
                        <input
                            type="text"
                            name="imei2"
                            id="imei2"
                            class="control"
                            maxlength="30"
                        >
                    </div>

                    <div class="form-group">
                        <label for="marca">Marca</label>
                        <input
                            type="text"
                            name="marca"
                            id="marca"
                            class="control"
                            maxlength="80"
                            placeholder="Pode deixar vazio se ainda não souber"
                        >
                    </div>

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

                    <div class="form-group">
                        <label for="cor">Cor</label>
                        <input
                            type="text"
                            name="cor"
                            id="cor"
                            class="control"
                            maxlength="50"
                        >
                    </div>

                    <div class="form-group">
                        <label for="armazenamento">Armazenamento</label>
                        <input
                            type="text"
                            name="armazenamento"
                            id="armazenamento"
                            class="control"
                            maxlength="50"
                            placeholder="Ex.: 128 GB"
                        >
                    </div>

                    <div class="form-group">
                        <label for="sistemaOperacional">
                            Sistema operacional
                        </label>

                        <input
                            type="text"
                            name="sistema_operacional"
                            id="sistemaOperacional"
                            class="control"
                            maxlength="80"
                            placeholder="Android, iOS..."
                        >
                    </div>

                    <div class="form-group">
                        <label for="condicaoAparelho">
                            Condição física
                        </label>

                        <select
                            name="condicao_aparelho"
                            id="condicaoAparelho"
                            class="control"
                        >
                            <option value="NAO_AVALIADO">
                                Não avaliado
                            </option>
                            <option value="NOVO">Novo</option>
                            <option value="BOM">Bom</option>
                            <option value="REGULAR">Regular</option>
                            <option value="DANIFICADO">Danificado</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="MANUTENCAO">Em manutenção</option>
                            <option value="EXTRAVIADO">Extraviado</option>
                            <option value="BAIXADO">Baixado</option>
                        </select>
                    </div>

                    <div class="form-group">
                        <label style="display:flex;align-items:center;gap:8px;padding-top:22px;">
                            <input
                                type="checkbox"
                                name="possui_carregador"
                                id="possuiCarregador"
                                value="1"
                            >
                            Possui carregador
                        </label>
                    </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 smartphone
                            </strong>

                            <span>
                                Informe nome e setor para cadastrar o aparelho
                                já em uso. Ao editar e trocar esses dados, o
                                histórico registra automaticamente a 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="acessorios">Acessórios</label>
                        <textarea
                            name="acessorios"
                            id="acessorios"
                            class="control"
                            placeholder="Capa, película, cabo, caixa, fone..."
                        ></textarea>
                    </div>

                    <div class="form-group full">
                        <label for="observacoes">Observações</label>
                        <textarea
                            name="observacoes"
                            id="observacoes"
                            class="control"
                            placeholder="Estado físico, avarias, procedência 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 smartphone
                </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 smartphone
                </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-phone-fill"></i>
                    <span id="vinculoRotulo">Smartphone 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="chipId">Chip / linha utilizada</label>

                        <select
                            name="chip_id"
                            id="chipId"
                            class="control"
                        >
                            <option value="">
                                Nenhum chip vinculado
                            </option>

                            <?php foreach ($chips as $chip): ?>
                                <option value="<?= (int) $chip['id'] ?>">
                                    <?= telecomE(
                                        trim(
                                            implode(
                                                ' • ',
                                                array_filter([
                                                    $chip['numero_linha']
                                                        ?: $chip['codigo_interno'],
                                                    $chip['operadora'],
                                                    $chip['responsavel_nome']
                                                        ? 'Atual: ' .
                                                          $chip['responsavel_nome']
                                                        : ''
                                                ])
                                            )
                                        )
                                    ) ?>
                                </option>
                            <?php endforeach; ?>
                        </select>

                        <span class="form-help">
                            O chip 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"
                            placeholder="Acessórios entregues, condição física ou termo utilizado..."
                        ></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 chip 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">
                        Smartphone 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="MANUTENCAO">Em manutenção</option>
                        <option value="EXTRAVIADO">Extraviado</option>
                        <option value="BAIXADO">Baixado</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-phone-fill me-2"></i>Cadastrar smartphone';

    document.getElementById('cadastroId').value = '';
    document.getElementById('patrimonio').value = '';
    document.getElementById('numeroSerie').value = '';
    document.getElementById('imei1').value = '';
    document.getElementById('imei2').value = '';
    document.getElementById('marca').value = '';
    document.getElementById('modelo').value = '';
    document.getElementById('cor').value = '';
    document.getElementById('armazenamento').value = '';
    document.getElementById('sistemaOperacional').value = '';
    document.getElementById('condicaoAparelho').value =
        'NAO_AVALIADO';

    document.getElementById('statusCadastro').value =
        'SEM_IDENTIFICACAO';

    document.getElementById('possuiCarregador').checked =
        false;

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

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

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

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

    document.getElementById('numeroSerie').value =
        item.numero_serie || '';

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

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

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

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

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

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

    document.getElementById('sistemaOperacional').value =
        item.sistema_operacional || '';

    document.getElementById('condicaoAparelho').value =
        item.condicao_aparelho || 'NAO_AVALIADO';

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

    document.getElementById('possuiCarregador').checked =
        Number(item.possui_carregador) === 1;

    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('acessorios').value =
        item.acessorios || '';

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

    modais.cadastro.show();
}

function abrirVinculo(item) {
    document.getElementById('vinculoId').value = item.id;
    document.getElementById('vinculoRotulo').textContent =
        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('chipId').value =
        item.chip_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 =
        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>
