-- ============================================================
-- MRCSYS ERP - Database Schema
-- Sistema ERP com Emissão de NF-e/NFC-e
-- Version: 1.0.0
-- ============================================================

SET NAMES utf8mb4;
SET CHARACTER SET utf8mb4;
SET collation_connection = utf8mb4_unicode_ci;

CREATE DATABASE IF NOT EXISTS mrcsyserp
    CHARACTER SET utf8mb4
    COLLATE utf8mb4_unicode_ci;

USE mrcsyserp;

-- ============================================================
-- TABELA: empresas (Cadastro da Empresa)
-- ============================================================
CREATE TABLE IF NOT EXISTS empresas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    razao_social VARCHAR(255) NOT NULL,
    nome_fantasia VARCHAR(255),
    cnpj VARCHAR(18) NOT NULL UNIQUE,
    inscricao_estadual VARCHAR(20),
    inscricao_municipal VARCHAR(20),
    regime_tributario TINYINT NOT NULL DEFAULT 1 COMMENT '1=Simples Nacional, 2=Lucro Presumido, 3=Lucro Real',
    crt TINYINT NOT NULL DEFAULT 1 COMMENT 'Código Regime Tributário',
    endereco VARCHAR(255),
    numero VARCHAR(20),
    complemento VARCHAR(100),
    bairro VARCHAR(100),
    cidade VARCHAR(100),
    uf CHAR(2),
    cep VARCHAR(10),
    codigo_municipio VARCHAR(10),
    codigo_uf VARCHAR(2),
    telefone VARCHAR(20),
    email VARCHAR(255),
    -- Certificado Digital
    certificado_digital LONGBLOB COMMENT 'Arquivo .pfx do certificado A1',
    certificado_senha VARCHAR(255) COMMENT 'Senha do certificado (criptografada)',
    certificado_validade DATE,
    -- Configurações SEFAZ
    ambiente_sefaz TINYINT NOT NULL DEFAULT 2 COMMENT '1=Produção, 2=Homologação',
    serie_nfe INT DEFAULT 1,
    numero_nfe INT DEFAULT 0,
    serie_nfce INT DEFAULT 1,
    numero_nfce INT DEFAULT 0,
    csc_id VARCHAR(10) COMMENT 'ID do CSC para NFC-e',
    csc_token VARCHAR(100) COMMENT 'Token CSC para NFC-e',
    -- Controle
    logo LONGBLOB,
    ativo TINYINT(1) DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_cnpj (cnpj),
    INDEX idx_ativo (ativo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELA: filiais (Multi-filial)
-- ============================================================
CREATE TABLE IF NOT EXISTS filiais (
    id INT AUTO_INCREMENT PRIMARY KEY,
    empresa_id INT NOT NULL,
    nome VARCHAR(255) NOT NULL,
    cnpj VARCHAR(18),
    inscricao_estadual VARCHAR(20),
    endereco VARCHAR(255),
    numero VARCHAR(20),
    complemento VARCHAR(100),
    bairro VARCHAR(100),
    cidade VARCHAR(100),
    uf CHAR(2),
    cep VARCHAR(10),
    codigo_municipio VARCHAR(10),
    telefone VARCHAR(20),
    ativo TINYINT(1) DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE,
    INDEX idx_empresa (empresa_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELA: usuarios
-- ============================================================
CREATE TABLE IF NOT EXISTS usuarios (
    id INT AUTO_INCREMENT PRIMARY KEY,
    empresa_id INT NOT NULL,
    filial_id INT,
    nome VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL,
    senha VARCHAR(255) NOT NULL COMMENT 'Hash bcrypt',
    perfil ENUM('admin','fiscal','vendas','estoque','financeiro') NOT NULL DEFAULT 'vendas',
    avatar VARCHAR(255),
    ativo TINYINT(1) DEFAULT 1,
    ultimo_login DATETIME,
    token_recuperacao VARCHAR(255),
    token_expiracao DATETIME,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE,
    FOREIGN KEY (filial_id) REFERENCES filiais(id) ON DELETE SET NULL,
    UNIQUE KEY uk_email (email),
    INDEX idx_empresa (empresa_id),
    INDEX idx_perfil (perfil)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELA: permissoes
-- ============================================================
CREATE TABLE IF NOT EXISTS permissoes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    perfil VARCHAR(50) NOT NULL,
    modulo VARCHAR(100) NOT NULL,
    pode_ver TINYINT(1) DEFAULT 0,
    pode_criar TINYINT(1) DEFAULT 0,
    pode_editar TINYINT(1) DEFAULT 0,
    pode_excluir TINYINT(1) DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY uk_perfil_modulo (perfil, modulo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELA: audit_logs (Auditoria)
-- ============================================================
CREATE TABLE IF NOT EXISTS audit_logs (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    usuario_id INT,
    empresa_id INT,
    acao VARCHAR(50) NOT NULL,
    modulo VARCHAR(100),
    tabela VARCHAR(100),
    registro_id INT,
    dados_anteriores JSON,
    dados_novos JSON,
    ip VARCHAR(45),
    user_agent TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE SET NULL,
    INDEX idx_usuario (usuario_id),
    INDEX idx_acao (acao),
    INDEX idx_modulo (modulo),
    INDEX idx_data (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELA: categorias_produto
-- ============================================================
CREATE TABLE IF NOT EXISTS categorias_produto (
    id INT AUTO_INCREMENT PRIMARY KEY,
    empresa_id INT NOT NULL,
    nome VARCHAR(255) NOT NULL,
    descricao TEXT,
    ativo TINYINT(1) DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE,
    INDEX idx_empresa (empresa_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELA: produtos
-- ============================================================
CREATE TABLE IF NOT EXISTS produtos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    empresa_id INT NOT NULL,
    categoria_id INT,
    codigo_interno VARCHAR(50),
    codigo_ean VARCHAR(14),
    descricao VARCHAR(255) NOT NULL,
    ncm VARCHAR(10) NOT NULL,
    cfop VARCHAR(4) NOT NULL DEFAULT '5102',
    cest VARCHAR(10),
    unidade VARCHAR(6) NOT NULL DEFAULT 'UN',
    preco_custo DECIMAL(15,2) DEFAULT 0.00,
    preco_venda DECIMAL(15,2) NOT NULL DEFAULT 0.00,
    estoque_atual DECIMAL(15,3) DEFAULT 0.000,
    estoque_minimo DECIMAL(15,3) DEFAULT 0.000,
    peso_liquido DECIMAL(10,3) DEFAULT 0.000,
    peso_bruto DECIMAL(10,3) DEFAULT 0.000,
    -- Tributação ICMS
    origem TINYINT DEFAULT 0 COMMENT '0=Nacional',
    cst_icms VARCHAR(3) DEFAULT '00',
    csosn VARCHAR(4),
    aliquota_icms DECIMAL(5,2) DEFAULT 0.00,
    reducao_bc_icms DECIMAL(5,2) DEFAULT 0.00,
    -- ICMS ST
    cst_icms_st VARCHAR(3),
    aliquota_icms_st DECIMAL(5,2) DEFAULT 0.00,
    mva_icms_st DECIMAL(5,2) DEFAULT 0.00,
    -- IPI
    cst_ipi VARCHAR(2) DEFAULT '50',
    aliquota_ipi DECIMAL(5,2) DEFAULT 0.00,
    -- PIS
    cst_pis VARCHAR(2) DEFAULT '07',
    aliquota_pis DECIMAL(5,2) DEFAULT 0.00,
    -- COFINS
    cst_cofins VARCHAR(2) DEFAULT '07',
    aliquota_cofins DECIMAL(5,2) DEFAULT 0.00,
    -- Controle
    imagem VARCHAR(255),
    observacoes TEXT,
    ativo TINYINT(1) DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE,
    FOREIGN KEY (categoria_id) REFERENCES categorias_produto(id) ON DELETE SET NULL,
    INDEX idx_empresa (empresa_id),
    INDEX idx_codigo (codigo_interno),
    INDEX idx_ean (codigo_ean),
    INDEX idx_descricao (descricao),
    INDEX idx_ativo (ativo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELA: clientes
-- ============================================================
CREATE TABLE IF NOT EXISTS clientes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    empresa_id INT NOT NULL,
    tipo_pessoa ENUM('F','J') NOT NULL DEFAULT 'F',
    cpf_cnpj VARCHAR(18),
    rg_ie VARCHAR(20),
    inscricao_municipal VARCHAR(20),
    nome_razao VARCHAR(255) NOT NULL,
    nome_fantasia VARCHAR(255),
    email VARCHAR(255),
    telefone VARCHAR(20),
    celular VARCHAR(20),
    -- Endereço
    cep VARCHAR(10),
    endereco VARCHAR(255),
    numero VARCHAR(20),
    complemento VARCHAR(100),
    bairro VARCHAR(100),
    cidade VARCHAR(100),
    uf CHAR(2),
    codigo_municipio VARCHAR(10),
    codigo_pais VARCHAR(5) DEFAULT '1058',
    -- Fiscal
    indicador_ie TINYINT DEFAULT 9 COMMENT '1=Contribuinte, 2=Isento, 9=Não contribuinte',
    -- Controle
    observacoes TEXT,
    ativo TINYINT(1) DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE,
    INDEX idx_empresa (empresa_id),
    INDEX idx_cpf_cnpj (cpf_cnpj),
    INDEX idx_nome (nome_razao),
    INDEX idx_ativo (ativo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELA: notas_fiscais
-- ============================================================
CREATE TABLE IF NOT EXISTS notas_fiscais (
    id INT AUTO_INCREMENT PRIMARY KEY,
    empresa_id INT NOT NULL,
    filial_id INT,
    cliente_id INT,
    usuario_id INT,
    -- Identificação
    modelo CHAR(2) NOT NULL COMMENT '55=NF-e, 65=NFC-e',
    serie INT NOT NULL DEFAULT 1,
    numero INT NOT NULL,
    chave_acesso VARCHAR(44),
    nat_operacao VARCHAR(255) DEFAULT 'VENDA DE MERCADORIA',
    tipo_operacao TINYINT DEFAULT 1 COMMENT '0=Entrada, 1=Saída',
    finalidade TINYINT DEFAULT 1 COMMENT '1=Normal, 2=Complementar, 3=Ajuste, 4=Devolução',
    -- Valores
    valor_produtos DECIMAL(15,2) DEFAULT 0.00,
    valor_frete DECIMAL(15,2) DEFAULT 0.00,
    valor_seguro DECIMAL(15,2) DEFAULT 0.00,
    valor_desconto DECIMAL(15,2) DEFAULT 0.00,
    valor_outras_despesas DECIMAL(15,2) DEFAULT 0.00,
    valor_icms DECIMAL(15,2) DEFAULT 0.00,
    valor_icms_st DECIMAL(15,2) DEFAULT 0.00,
    valor_ipi DECIMAL(15,2) DEFAULT 0.00,
    valor_pis DECIMAL(15,2) DEFAULT 0.00,
    valor_cofins DECIMAL(15,2) DEFAULT 0.00,
    valor_total DECIMAL(15,2) NOT NULL DEFAULT 0.00,
    valor_aproximado_tributos DECIMAL(15,2) DEFAULT 0.00,
    -- Status
    status ENUM('rascunho','pendente','autorizada','cancelada','denegada','inutilizada','rejeitada') DEFAULT 'rascunho',
    codigo_status INT,
    motivo_status TEXT,
    -- Protocolo SEFAZ
    protocolo VARCHAR(20),
    data_autorizacao DATETIME,
    recibo VARCHAR(20),
    -- XML
    xml_envio LONGTEXT,
    xml_retorno LONGTEXT,
    xml_cancelamento LONGTEXT,
    xml_carta_correcao LONGTEXT,
    -- Controle
    informacoes_complementares TEXT,
    informacoes_fisco TEXT,
    contingencia TINYINT(1) DEFAULT 0,
    data_emissao DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE,
    FOREIGN KEY (filial_id) REFERENCES filiais(id) ON DELETE SET NULL,
    FOREIGN KEY (cliente_id) REFERENCES clientes(id) ON DELETE SET NULL,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE SET NULL,
    UNIQUE KEY uk_chave (chave_acesso),
    INDEX idx_empresa (empresa_id),
    INDEX idx_modelo (modelo),
    INDEX idx_numero (serie, numero),
    INDEX idx_status (status),
    INDEX idx_data (data_emissao),
    INDEX idx_cliente (cliente_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELA: notas_fiscais_itens
-- ============================================================
CREATE TABLE IF NOT EXISTS notas_fiscais_itens (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nota_fiscal_id INT NOT NULL,
    produto_id INT,
    numero_item INT NOT NULL,
    -- Produto
    codigo VARCHAR(50),
    ean VARCHAR(14),
    descricao VARCHAR(255) NOT NULL,
    ncm VARCHAR(10),
    cfop VARCHAR(4) NOT NULL,
    unidade VARCHAR(6),
    quantidade DECIMAL(15,4) NOT NULL,
    valor_unitario DECIMAL(15,4) NOT NULL,
    valor_total DECIMAL(15,2) NOT NULL,
    valor_desconto DECIMAL(15,2) DEFAULT 0.00,
    -- Tributação
    origem TINYINT DEFAULT 0,
    cst_icms VARCHAR(3),
    csosn VARCHAR(4),
    base_icms DECIMAL(15,2) DEFAULT 0.00,
    aliquota_icms DECIMAL(5,2) DEFAULT 0.00,
    valor_icms DECIMAL(15,2) DEFAULT 0.00,
    -- ICMS ST
    base_icms_st DECIMAL(15,2) DEFAULT 0.00,
    aliquota_icms_st DECIMAL(5,2) DEFAULT 0.00,
    valor_icms_st DECIMAL(15,2) DEFAULT 0.00,
    -- IPI
    cst_ipi VARCHAR(2),
    base_ipi DECIMAL(15,2) DEFAULT 0.00,
    aliquota_ipi DECIMAL(5,2) DEFAULT 0.00,
    valor_ipi DECIMAL(15,2) DEFAULT 0.00,
    -- PIS
    cst_pis VARCHAR(2),
    base_pis DECIMAL(15,2) DEFAULT 0.00,
    aliquota_pis DECIMAL(5,2) DEFAULT 0.00,
    valor_pis DECIMAL(15,2) DEFAULT 0.00,
    -- COFINS
    cst_cofins VARCHAR(2),
    base_cofins DECIMAL(15,2) DEFAULT 0.00,
    aliquota_cofins DECIMAL(5,2) DEFAULT 0.00,
    valor_cofins DECIMAL(15,2) DEFAULT 0.00,
    -- Info adicional
    informacoes_adicionais TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (nota_fiscal_id) REFERENCES notas_fiscais(id) ON DELETE CASCADE,
    FOREIGN KEY (produto_id) REFERENCES produtos(id) ON DELETE SET NULL,
    INDEX idx_nota (nota_fiscal_id),
    INDEX idx_produto (produto_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELA: inutilizacoes
-- ============================================================
CREATE TABLE IF NOT EXISTS inutilizacoes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    empresa_id INT NOT NULL,
    modelo CHAR(2) NOT NULL,
    serie INT NOT NULL,
    numero_inicial INT NOT NULL,
    numero_final INT NOT NULL,
    justificativa TEXT NOT NULL,
    protocolo VARCHAR(20),
    status ENUM('pendente','aprovada','rejeitada') DEFAULT 'pendente',
    xml_envio LONGTEXT,
    xml_retorno LONGTEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE,
    INDEX idx_empresa (empresa_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELA: cartas_correcao
-- ============================================================
CREATE TABLE IF NOT EXISTS cartas_correcao (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nota_fiscal_id INT NOT NULL,
    sequencia INT NOT NULL DEFAULT 1,
    correcao TEXT NOT NULL,
    protocolo VARCHAR(20),
    status ENUM('pendente','aprovada','rejeitada') DEFAULT 'pendente',
    xml_envio LONGTEXT,
    xml_retorno LONGTEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (nota_fiscal_id) REFERENCES notas_fiscais(id) ON DELETE CASCADE,
    INDEX idx_nota (nota_fiscal_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELA: vendas (PDV)
-- ============================================================
CREATE TABLE IF NOT EXISTS vendas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    empresa_id INT NOT NULL,
    filial_id INT,
    usuario_id INT NOT NULL,
    cliente_id INT,
    nota_fiscal_id INT,
    -- Valores
    subtotal DECIMAL(15,2) NOT NULL DEFAULT 0.00,
    desconto DECIMAL(15,2) DEFAULT 0.00,
    acrescimo DECIMAL(15,2) DEFAULT 0.00,
    valor_total DECIMAL(15,2) NOT NULL DEFAULT 0.00,
    -- Status
    status ENUM('aberta','finalizada','cancelada') DEFAULT 'aberta',
    observacoes TEXT,
    data_venda DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE,
    FOREIGN KEY (filial_id) REFERENCES filiais(id) ON DELETE SET NULL,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE,
    FOREIGN KEY (cliente_id) REFERENCES clientes(id) ON DELETE SET NULL,
    FOREIGN KEY (nota_fiscal_id) REFERENCES notas_fiscais(id) ON DELETE SET NULL,
    INDEX idx_empresa (empresa_id),
    INDEX idx_usuario (usuario_id),
    INDEX idx_status (status),
    INDEX idx_data (data_venda)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELA: vendas_itens
-- ============================================================
CREATE TABLE IF NOT EXISTS vendas_itens (
    id INT AUTO_INCREMENT PRIMARY KEY,
    venda_id INT NOT NULL,
    produto_id INT NOT NULL,
    quantidade DECIMAL(15,4) NOT NULL,
    preco_unitario DECIMAL(15,4) NOT NULL,
    desconto DECIMAL(15,2) DEFAULT 0.00,
    subtotal DECIMAL(15,2) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (venda_id) REFERENCES vendas(id) ON DELETE CASCADE,
    FOREIGN KEY (produto_id) REFERENCES produtos(id) ON DELETE CASCADE,
    INDEX idx_venda (venda_id),
    INDEX idx_produto (produto_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELA: pagamentos
-- ============================================================
CREATE TABLE IF NOT EXISTS pagamentos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    venda_id INT NOT NULL,
    forma_pagamento ENUM('dinheiro','credito','debito','pix','boleto','transferencia','outros') NOT NULL,
    valor DECIMAL(15,2) NOT NULL,
    troco DECIMAL(15,2) DEFAULT 0.00,
    parcelas INT DEFAULT 1,
    bandeira VARCHAR(50),
    autorizacao VARCHAR(50),
    nsu VARCHAR(50),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (venda_id) REFERENCES vendas(id) ON DELETE CASCADE,
    INDEX idx_venda (venda_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELA: contas_receber
-- ============================================================
CREATE TABLE IF NOT EXISTS contas_receber (
    id INT AUTO_INCREMENT PRIMARY KEY,
    empresa_id INT NOT NULL,
    venda_id INT,
    cliente_id INT,
    descricao VARCHAR(255) NOT NULL,
    valor DECIMAL(15,2) NOT NULL,
    valor_pago DECIMAL(15,2) DEFAULT 0.00,
    data_vencimento DATE NOT NULL,
    data_pagamento DATE,
    status ENUM('pendente','pago','vencido','cancelado') DEFAULT 'pendente',
    forma_pagamento VARCHAR(50),
    observacoes TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE,
    FOREIGN KEY (venda_id) REFERENCES vendas(id) ON DELETE SET NULL,
    FOREIGN KEY (cliente_id) REFERENCES clientes(id) ON DELETE SET NULL,
    INDEX idx_empresa (empresa_id),
    INDEX idx_vencimento (data_vencimento),
    INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELA: movimentacoes_estoque
-- ============================================================
CREATE TABLE IF NOT EXISTS movimentacoes_estoque (
    id INT AUTO_INCREMENT PRIMARY KEY,
    empresa_id INT NOT NULL,
    produto_id INT NOT NULL,
    tipo ENUM('entrada','saida','ajuste') NOT NULL,
    quantidade DECIMAL(15,3) NOT NULL,
    estoque_anterior DECIMAL(15,3),
    estoque_posterior DECIMAL(15,3),
    referencia_tipo VARCHAR(50) COMMENT 'venda, compra, ajuste, nfe',
    referencia_id INT,
    observacoes TEXT,
    usuario_id INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE,
    FOREIGN KEY (produto_id) REFERENCES produtos(id) ON DELETE CASCADE,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE SET NULL,
    INDEX idx_empresa (empresa_id),
    INDEX idx_produto (produto_id),
    INDEX idx_tipo (tipo),
    INDEX idx_data (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELA: fechamentos_caixa
-- ============================================================
CREATE TABLE IF NOT EXISTS fechamentos_caixa (
    id INT AUTO_INCREMENT PRIMARY KEY,
    empresa_id INT NOT NULL,
    filial_id INT,
    usuario_id INT NOT NULL,
    data_abertura DATETIME NOT NULL,
    data_fechamento DATETIME,
    valor_abertura DECIMAL(15,2) DEFAULT 0.00,
    total_dinheiro DECIMAL(15,2) DEFAULT 0.00,
    total_cartao_credito DECIMAL(15,2) DEFAULT 0.00,
    total_cartao_debito DECIMAL(15,2) DEFAULT 0.00,
    total_pix DECIMAL(15,2) DEFAULT 0.00,
    total_boleto DECIMAL(15,2) DEFAULT 0.00,
    total_outros DECIMAL(15,2) DEFAULT 0.00,
    total_vendas DECIMAL(15,2) DEFAULT 0.00,
    total_cancelamentos DECIMAL(15,2) DEFAULT 0.00,
    valor_fechamento DECIMAL(15,2),
    diferenca DECIMAL(15,2) DEFAULT 0.00,
    status ENUM('aberto','fechado') DEFAULT 'aberto',
    observacoes TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE,
    FOREIGN KEY (filial_id) REFERENCES filiais(id) ON DELETE SET NULL,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE,
    INDEX idx_empresa (empresa_id),
    INDEX idx_status (status),
    INDEX idx_data (data_abertura)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELA: configuracoes
-- ============================================================
CREATE TABLE IF NOT EXISTS configuracoes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    empresa_id INT NOT NULL,
    chave VARCHAR(100) NOT NULL,
    valor TEXT,
    tipo VARCHAR(20) DEFAULT 'string',
    descricao VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE,
    UNIQUE KEY uk_empresa_chave (empresa_id, chave)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- DADOS INICIAIS
-- ============================================================

-- Permissões padrão
INSERT INTO permissoes (perfil, modulo, pode_ver, pode_criar, pode_editar, pode_excluir) VALUES
('admin', 'dashboard', 1, 1, 1, 1),
('admin', 'empresas', 1, 1, 1, 1),
('admin', 'usuarios', 1, 1, 1, 1),
('admin', 'produtos', 1, 1, 1, 1),
('admin', 'clientes', 1, 1, 1, 1),
('admin', 'vendas', 1, 1, 1, 1),
('admin', 'fiscal', 1, 1, 1, 1),
('admin', 'financeiro', 1, 1, 1, 1),
('admin', 'relatorios', 1, 1, 1, 1),
('admin', 'configuracoes', 1, 1, 1, 1),
('fiscal', 'dashboard', 1, 0, 0, 0),
('fiscal', 'fiscal', 1, 1, 1, 0),
('fiscal', 'relatorios', 1, 0, 0, 0),
('fiscal', 'produtos', 1, 0, 1, 0),
('fiscal', 'clientes', 1, 0, 0, 0),
('vendas', 'dashboard', 1, 0, 0, 0),
('vendas', 'vendas', 1, 1, 1, 0),
('vendas', 'produtos', 1, 0, 0, 0),
('vendas', 'clientes', 1, 1, 1, 0),
('estoque', 'dashboard', 1, 0, 0, 0),
('estoque', 'produtos', 1, 1, 1, 0),
('estoque', 'relatorios', 1, 0, 0, 0),
('financeiro', 'dashboard', 1, 0, 0, 0),
('financeiro', 'financeiro', 1, 1, 1, 0),
('financeiro', 'relatorios', 1, 0, 0, 0);
