-- ============================================================
-- Financeiro Aviure — Fase 1 da normalização do banco
-- ============================================================
-- Este arquivo é só de REFERÊNCIA/documentação — as tabelas abaixo
-- já são criadas automaticamente (CREATE TABLE IF NOT EXISTS) pelo
-- script migrate-to-tables.js na primeira vez que ele roda.
--
-- Nada aqui apaga ou altera a tabela `kv_store` que já existe.
-- As tabelas novas são aditivas: o app continua funcionando lendo
-- do jeito que já lê (kv_store) enquanto essa fase for só de leitura.
-- ============================================================

CREATE TABLE IF NOT EXISTS contas (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nome VARCHAR(100) NOT NULL UNIQUE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS servicos (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nome VARCHAR(150) NOT NULL UNIQUE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS clientes (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nome VARCHAR(255) NOT NULL,
  asaas_customer_id VARCHAR(64) NULL,
  conta_padrao_id INT NULL,
  criado_em DATETIME DEFAULT CURRENT_TIMESTAMP,
  atualizado_em DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  UNIQUE KEY uniq_nome (nome),
  KEY idx_asaas_customer_id (asaas_customer_id),
  CONSTRAINT fk_clientes_conta FOREIGN KEY (conta_padrao_id) REFERENCES contas(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS lancamentos (
  id VARCHAR(64) PRIMARY KEY,          -- mantém o mesmo id que já existia no JSON (front-end)
  tipo ENUM('recorrente','pontual','despesa') NOT NULL,
  competencia CHAR(7) NOT NULL,        -- mês de competência, formato "2026-08"
  cliente_id INT NULL,
  servico_id INT NULL,
  conta_id INT NULL,
  nome_lancamento VARCHAR(255) NULL,   -- nome/descrição original (útil quando não tem cliente vinculado)
  categoria VARCHAR(100) NULL,         -- só pra despesas (Ferramentas, Comissão, etc.)
  fornecedor VARCHAR(255) NULL,        -- só pra despesas
  valor DECIMAL(12,2) NOT NULL DEFAULT 0,
  vencimento_dia VARCHAR(10) NULL,     -- dia/data original (formato livre, como já vinha no app)
  pago TINYINT(1) NOT NULL DEFAULT 0,
  origem ENUM('manual','asaas') NOT NULL DEFAULT 'manual',
  asaas_id VARCHAR(64) NULL,
  asaas_description VARCHAR(255) NULL,
  kind_manual TINYINT(1) NOT NULL DEFAULT 0, -- 1 = usuário trocou Recorrente/Pontual manualmente
  criado_em DATETIME DEFAULT CURRENT_TIMESTAMP,
  atualizado_em DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  KEY idx_competencia (competencia),
  KEY idx_cliente (cliente_id),
  KEY idx_conta (conta_id),
  KEY idx_asaas_id (asaas_id),
  CONSTRAINT fk_lanc_cliente FOREIGN KEY (cliente_id) REFERENCES clientes(id),
  CONSTRAINT fk_lanc_servico FOREIGN KEY (servico_id) REFERENCES servicos(id),
  CONSTRAINT fk_lanc_conta FOREIGN KEY (conta_id) REFERENCES contas(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
