-- ==========================================================
-- 1. ESTRUTURA DO BANCO DE DADOS CENTRAL (CONFIGURAÇÕES SAAS)
-- ==========================================================
CREATE DATABASE IF NOT EXISTS coatlus_central CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE coatlus_central;

-- Tabela de Tenants (Clientes/Empresas do SaaS)
CREATE TABLE IF NOT EXISTS tenants (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome_empresa VARCHAR(150) NOT NULL,
    cnpj VARCHAR(14) UNIQUE NOT NULL,
    token_acesso VARCHAR(64) UNIQUE NOT NULL,
    db_name VARCHAR(64) NOT NULL,
    status INT DEFAULT 1, -- 1: Ativo, 0: Suspenso
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;

-- Tabela de Histórico de Alterações de Banco de Dados (Auditoria Central)
CREATE TABLE IF NOT EXISTS historico_alteracoes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    query_sql TEXT NOT NULL,
    tabela VARCHAR(64) NOT NULL DEFAULT 'geral',
    executado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    bancos_afetados TEXT NOT NULL,
    status VARCHAR(20) NOT NULL,
    erro TEXT NULL
) ENGINE=InnoDB;

-- Conceder permissões totais para o usuário do PHP poder criar e alterar os bancos de clientes
GRANT ALL PRIVILEGES ON *.* TO 'coatlus_user'@'%';
FLUSH PRIVILEGES;

-- Inserir empresa de teste inicial no banco central
INSERT INTO tenants (nome_empresa, cnpj, token_acesso, db_name, status) 
VALUES (
    'CLIENTE TESTE COATLUS', 
    '12345678000199', 
    'token_teste_coatlus_123456', 
    'coatlus_cliente_teste', 
    1
) ON DUPLICATE KEY UPDATE status=status;

-- ==========================================================
-- 2. ESTRUTURA DO BANCO DE DADOS DO CLIENTE (MOLDE INDEPENDENTE)
-- ==========================================================
USE DATABASE_PLACEHOLDER;


DROP TABLE IF EXISTS `adquirentes`;
CREATE TABLE `adquirentes` (
  `adq_id` int(11) NOT NULL,
  `empresa_id` int(11) DEFAULT NULL,
  `adq_cnpj` varchar(14) DEFAULT NULL,
  `adq_nome` varchar(100) DEFAULT NULL,
  `adquirente_ativo` int(11) DEFAULT NULL,
  `ativo` int(11) DEFAULT 1,
  PRIMARY KEY (`adq_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `apps`;
CREATE TABLE `apps` (
  `app_id` int(11) NOT NULL AUTO_INCREMENT,
  `app_produto` varchar(30) DEFAULT NULL,
  `app_nome_dispositivo` varchar(60) DEFAULT NULL,
  `app_servidor` varchar(60) DEFAULT NULL,
  `app_codigo_ativavao` varchar(6) DEFAULT NULL,
  `app_dispositivo` int(2) DEFAULT NULL,
  `app_status` int(1) DEFAULT NULL,
  `data_cadastro` timestamp NULL DEFAULT current_timestamp(),
  PRIMARY KEY (`app_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `bandeiras`;
CREATE TABLE `bandeiras` (
  `codigo` varchar(10) NOT NULL,
  `nome` varchar(100) DEFAULT NULL,
  `ativo` int(11) DEFAULT 1,
  `usuario` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`codigo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `cobrar`;
CREATE TABLE `cobrar` (
  `cobrar_id` int(11) NOT NULL,
  `empresa_id` int(11) DEFAULT NULL,
  `cobrar_nome` varchar(100) DEFAULT NULL,
  `cobrar_forma_recebimento` varchar(5) DEFAULT NULL,
  `grupo_ativo` int(11) DEFAULT 1,
  `grupo_app_vendas` varchar(10) DEFAULT '1',
  PRIMARY KEY (`cobrar_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `cobrar_integracao`;
CREATE TABLE `cobrar_integracao` (
  `cobrar_integracao_id` int(11) NOT NULL,
  `cobrar_id` int(11) DEFAULT NULL,
  `empresa_id` int(11) DEFAULT NULL,
  `cobrar_integracao_nome` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`cobrar_integracao_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `grupos`;
CREATE TABLE `grupos` (
  `grupo_id` int(11) NOT NULL,
  `empresa_id` int(11) DEFAULT NULL,
  `grupo_nome` varchar(100) DEFAULT NULL,
  `ativo` int(11) DEFAULT 1,
  PRIMARY KEY (`grupo_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `integracao`;
CREATE TABLE `integracao` (
  `integracao_id` int(11) NOT NULL,
  `empresa_id` int(11) DEFAULT NULL,
  `integracao_nome` varchar(100) DEFAULT NULL,
  `integracao_tpAmb` varchar(2) DEFAULT NULL,
  `integracao_cnpj_adquirente` varchar(14) DEFAULT NULL,
  `integracao_cliente_id` varchar(100) DEFAULT NULL,
  `integracao_merchant_id` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`integracao_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `produtos`;
CREATE TABLE `produtos` (
  `produto_id` int(11) NOT NULL,
  `empresa_id` int(11) DEFAULT NULL,
  `produto_codigo` varchar(50) DEFAULT NULL,
  `produto_descricao` varchar(200) DEFAULT NULL,
  `produto_valor` double DEFAULT NULL,
  `produto_grupo_id` int(11) DEFAULT NULL,
  `produto_unidade` varchar(10) DEFAULT NULL,
  `produto_gtin` varchar(14) DEFAULT NULL,
  `produto_ncm` varchar(8) DEFAULT NULL,
  `produto_cest` varchar(7) DEFAULT NULL,
  `produto_cfop` varchar(4) DEFAULT NULL,
  `produto_cst_icms` varchar(3) DEFAULT NULL,
  `produto_aliquota_icms` double DEFAULT NULL,
  `produto_cst_pis` varchar(3) DEFAULT NULL,
  `produto_aliquota_pis` double DEFAULT NULL,
  `produto_cst_cofins` varchar(3) DEFAULT NULL,
  `produto_aliquota_cofins` double DEFAULT NULL,
  `produto_origem` int(11) DEFAULT NULL,
  `ativo` int(11) DEFAULT 1,
  PRIMARY KEY (`produto_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `sincronizacao`;
CREATE TABLE `sincronizacao` (
  `tabela_nome` varchar(100) NOT NULL,
  `sincronizado_em` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`tabela_nome`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `vendas`;
CREATE TABLE `vendas` (
  `venda_id` int(11) NOT NULL AUTO_INCREMENT,
  `empresa_id` int(11) DEFAULT NULL,
  `venda_uuid` varchar(64) DEFAULT NULL,
  `cliente_id` int(11) DEFAULT NULL,
  `venda_data` varchar(30) DEFAULT NULL,
  `total` double DEFAULT NULL,
  `situacao` varchar(20) DEFAULT NULL,
  `observacao` text DEFAULT NULL,
  `fatura_id` int(11) DEFAULT 0,
  `nfe_chave` varchar(44) DEFAULT NULL,
  `nfe_recibo` varchar(20) DEFAULT NULL,
  `nfe_protocolo` varchar(20) DEFAULT NULL,
  `nfe_xml` text DEFAULT NULL,
  `rejeicao_motivo` text DEFAULT NULL,
  `dispositivo` varchar(50) DEFAULT NULL,
  `sincronizado` int(11) DEFAULT 0,
  PRIMARY KEY (`venda_id`),
  UNIQUE KEY `venda_uuid` (`venda_uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `vendas_itens`;
CREATE TABLE `vendas_itens` (
  `item_id` int(11) NOT NULL AUTO_INCREMENT,
  `venda_id` int(11) DEFAULT NULL,
  `produto_id` int(11) DEFAULT NULL,
  `quantidade` double DEFAULT NULL,
  `valor_unitario` double DEFAULT NULL,
  `subtotal` double DEFAULT NULL,
  `desconto` double DEFAULT NULL,
  `total` double DEFAULT NULL,
  PRIMARY KEY (`item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `vendas_pagamentos`;
CREATE TABLE `vendas_pagamentos` (
  `pagamento_id` int(11) NOT NULL AUTO_INCREMENT,
  `venda_id` int(11) DEFAULT NULL,
  `cobrar_id` int(11) DEFAULT NULL,
  `cobrar_integracao_id` int(11) DEFAULT NULL,
  `cobrar_integracao_nome` varchar(100) DEFAULT NULL,
  `forma_pagamento` varchar(50) DEFAULT NULL,
  `valor` double DEFAULT NULL,
  `nsu` varchar(50) DEFAULT NULL,
  `bandeira_id` varchar(50) DEFAULT NULL,
  `adquirente` varchar(100) DEFAULT NULL,
  `adquirente_cnpj` varchar(14) DEFAULT NULL,
  `integracao_payload` text DEFAULT NULL,
  PRIMARY KEY (`pagamento_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

