<?php

function garantir_estrutura_clientes_projetos(mysqli $conn): void
{
    $conn->query("CREATE TABLE IF NOT EXISTS clientes_bms (
        id_cliente INT AUTO_INCREMENT PRIMARY KEY,
        nome_cliente VARCHAR(150) NOT NULL,
        documento VARCHAR(30) DEFAULT NULL,
        email VARCHAR(150) DEFAULT NULL,
        telefone VARCHAR(30) DEFAULT NULL,
        ativo CHAR(1) NOT NULL DEFAULT 'S',
        data_criacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        data_atualizacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        UNIQUE KEY uk_clientes_bms_nome (nome_cliente)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");

    $conn->query("CREATE TABLE IF NOT EXISTS clientes_bms_contatos (
        id_contato INT AUTO_INCREMENT PRIMARY KEY,
        id_cliente_fk INT NOT NULL,
        nome_contato VARCHAR(150) NOT NULL,
        cargo VARCHAR(100) DEFAULT NULL,
        email VARCHAR(150) DEFAULT NULL,
        telefone VARCHAR(30) DEFAULT NULL,
        observacoes TEXT,
        ativo CHAR(1) NOT NULL DEFAULT 'S',
        data_criacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        data_atualizacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        CONSTRAINT fk_clientes_bms_contatos_cliente FOREIGN KEY (id_cliente_fk) REFERENCES clientes_bms(id_cliente) ON DELETE CASCADE,
        INDEX idx_contatos_cliente (id_cliente_fk)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");

    $conn->query("CREATE TABLE IF NOT EXISTS projetos (
        id_projeto INT AUTO_INCREMENT PRIMARY KEY,
        id_cliente_fk INT NOT NULL,
        nome_projeto VARCHAR(200) NOT NULL,
        data_inicio DATE DEFAULT NULL,
        data_termino DATE DEFAULT NULL,
        ativo CHAR(1) NOT NULL DEFAULT 'S',
        descricao TEXT,
        observacoes TEXT,
        data_criacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        data_atualizacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        CONSTRAINT fk_projetos_cliente FOREIGN KEY (id_cliente_fk) REFERENCES clientes_bms(id_cliente) ON DELETE RESTRICT,
        INDEX idx_projetos_cliente (id_cliente_fk),
        INDEX idx_projetos_ativo (ativo)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");

    $dbResult = $conn->query("SELECT DATABASE() AS db_name");
    $dbRow = $dbResult ? $dbResult->fetch_assoc() : null;
    $dbName = $dbRow['db_name'] ?? '';

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

    $stmt = $conn->prepare("SELECT COUNT(*) AS total FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = 'questionario_template' AND COLUMN_NAME = 'id_projeto_fk'");
    if ($stmt) {
        $stmt->bind_param('s', $dbName);
        $stmt->execute();
        $total = (int)($stmt->get_result()->fetch_assoc()['total'] ?? 0);
        $stmt->close();

        if ($total === 0) {
            $conn->query("ALTER TABLE questionario_template ADD COLUMN id_projeto_fk INT NULL AFTER nome");
            $conn->query("ALTER TABLE questionario_template ADD CONSTRAINT fk_questionario_template_projeto FOREIGN KEY (id_projeto_fk) REFERENCES projetos(id_projeto) ON DELETE SET NULL");
            $conn->query("CREATE INDEX idx_questionario_template_projeto ON questionario_template(id_projeto_fk)");
        }
    }

    $stmtP = $conn->prepare("SELECT COUNT(*) AS total FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = 'pesquisas' AND COLUMN_NAME = 'id_projeto_fk'");
    if ($stmtP) {
        $stmtP->bind_param('s', $dbName);
        $stmtP->execute();
        $totalP = (int)($stmtP->get_result()->fetch_assoc()['total'] ?? 0);
        $stmtP->close();

        if ($totalP === 0) {
            $conn->query("ALTER TABLE pesquisas ADD COLUMN id_projeto_fk INT NULL AFTER id_questionario_template_fk");
            $conn->query("ALTER TABLE pesquisas ADD CONSTRAINT fk_pesquisas_projeto FOREIGN KEY (id_projeto_fk) REFERENCES projetos(id_projeto) ON DELETE SET NULL");
            $conn->query("CREATE INDEX idx_pesquisas_projeto ON pesquisas(id_projeto_fk)");
        }
    }

    $stmtB = $conn->prepare("SELECT COUNT(*) AS total FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = 'pesquisas' AND COLUMN_NAME = 'idbase_fk'");
    if ($stmtB) {
        $stmtB->bind_param('s', $dbName);
        $stmtB->execute();
        $totalB = (int)($stmtB->get_result()->fetch_assoc()['total'] ?? 0);
        $stmtB->close();

        if ($totalB === 0) {
            $conn->query("ALTER TABLE pesquisas ADD COLUMN idbase_fk INT NULL AFTER id_projeto_fk");
            $conn->query("CREATE INDEX idx_pesquisas_base ON pesquisas(idbase_fk)");
        }
    }
}

function listar_clientes_bms(mysqli $conn, bool $somenteAtivos = true): array
{
    $sql = "SELECT id_cliente, nome_cliente FROM clientes_bms";
    if ($somenteAtivos) {
        $sql .= " WHERE ativo = 'S'";
    }
    $sql .= " ORDER BY nome_cliente ASC";

    $dados = [];
    $res = $conn->query($sql);
    if ($res) {
        while ($row = $res->fetch_assoc()) {
            $dados[] = [
                'id_cliente' => (int)$row['id_cliente'],
                'nome_cliente' => $row['nome_cliente']
            ];
        }
    }

    return $dados;
}

function listar_projetos(mysqli $conn, bool $somenteAtivos = true, int $idCliente = 0): array
{
    $sql = "SELECT p.id_projeto, p.nome_projeto, p.id_cliente_fk, c.nome_cliente
            FROM projetos p
            INNER JOIN clientes_bms c ON c.id_cliente = p.id_cliente_fk
            WHERE 1=1";

    $types = '';
    $vals = [];

    if ($somenteAtivos) {
        $sql .= " AND p.ativo = 'S'";
    }

    if ($idCliente > 0) {
        $sql .= " AND p.id_cliente_fk = ?";
        $types .= 'i';
        $vals[] = $idCliente;
    }

    $sql .= " ORDER BY p.nome_projeto ASC";

    $dados = [];
    if ($types !== '') {
        $stmt = $conn->prepare($sql);
        if ($stmt) {
            $stmt->bind_param($types, ...$vals);
            $stmt->execute();
            $res = $stmt->get_result();
            while ($row = $res->fetch_assoc()) {
                $dados[] = [
                    'id_projeto' => (int)$row['id_projeto'],
                    'nome_projeto' => $row['nome_projeto'],
                    'id_cliente_fk' => (int)$row['id_cliente_fk'],
                    'nome_cliente' => $row['nome_cliente']
                ];
            }
            $stmt->close();
        }
    } else {
        $res = $conn->query($sql);
        if ($res) {
            while ($row = $res->fetch_assoc()) {
                $dados[] = [
                    'id_projeto' => (int)$row['id_projeto'],
                    'nome_projeto' => $row['nome_projeto'],
                    'id_cliente_fk' => (int)$row['id_cliente_fk'],
                    'nome_cliente' => $row['nome_cliente']
                ];
            }
        }
    }

    return $dados;
}
