-- Script de Criação do Banco de Dados
-- Sistema: COMPANY - Gestão Financeira
-- Autor: Company Comunicação

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";

-- --------------------------------------------------------

--
-- Estrutura da tabela `usuarios`
--
CREATE TABLE `usuarios` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(100) NOT NULL,
  `email` varchar(100) NOT NULL,
  `senha` varchar(255) NOT NULL,
  `data_criacao` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

--
-- Inserindo um usuário administrador padrão (senha: admin123)
--
INSERT INTO `usuarios` (`nome`, `email`, `senha`) VALUES
('Administrador', 'admin@company.com', '$2y$10$e.w2.b6X4/m0y4Y.Y5G7U.v3Q4H8C7B1N9M0Z6X5V4C3B2N1M');

-- --------------------------------------------------------

--
-- Estrutura da tabela `contas_bancarias`
--
CREATE TABLE `contas_bancarias` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `usuario_id` int(11) NOT NULL,
  `nome_conta` varchar(100) NOT NULL,
  `tipo_conta` enum('PF','PJ') NOT NULL DEFAULT 'PF',
  `banco` varchar(100) DEFAULT NULL,
  `agencia` varchar(20) DEFAULT NULL,
  `conta` varchar(20) DEFAULT NULL,
  `saldo_inicial` decimal(15,2) DEFAULT '0.00',
  `data_criacao` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_usuario_tipo` (`usuario_id`, `tipo_conta`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- --------------------------------------------------------

--
-- Estrutura da tabela `categorias`
--
CREATE TABLE `categorias` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `usuario_id` int(11) NOT NULL,
  `nome` varchar(100) NOT NULL,
  `tipo` enum('receita','despesa') NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_usuario_tipo` (`usuario_id`, `tipo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

--
-- Inserindo categorias padrão
--
INSERT INTO `categorias` (`usuario_id`, `nome`, `tipo`) VALUES
(1, 'Vendas', 'receita'),
(1, 'Serviços', 'receita'),
(1, 'Rendimentos', 'receita'),
(1, 'Alimentação', 'despesa'),
(1, 'Transporte', 'despesa'),
(1, 'Moradia', 'despesa'),
(1, 'Saúde', 'despesa'),
(1, 'Educação', 'despesa'),
(1, 'Lazer', 'despesa'),
(1, 'Impostos', 'despesa'),
(1, 'Taxas Bancárias', 'despesa'),
(1, 'Outros', 'despesa');

-- --------------------------------------------------------

--
-- Estrutura da tabela `lancamentos`
--
CREATE TABLE `lancamentos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `usuario_id` int(11) NOT NULL,
  `conta_id` int(11) NOT NULL,
  `categoria_id` int(11) NOT NULL,
  `tipo` enum('receita','despesa') NOT NULL,
  `valor` decimal(15,2) NOT NULL,
  `data_lancamento` date NOT NULL,
  `descricao` varchar(255) NOT NULL,
  `observacao` text DEFAULT NULL,
  `id_transacao_ofx` varchar(100) DEFAULT NULL,
  `data_criacao` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_transacao_ofx` (`id_transacao_ofx`),
  KEY `idx_conta_data` (`conta_id`, `data_lancamento`),
  KEY `idx_usuario_data` (`usuario_id`, `data_lancamento`),
  KEY `idx_tipo_data` (`tipo`, `data_lancamento`),
  KEY `idx_categoria` (`categoria_id`),
  CONSTRAINT `fk_lancamento_conta` FOREIGN KEY (`conta_id`) REFERENCES `contas_bancarias` (`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_lancamento_categoria` FOREIGN KEY (`categoria_id`) REFERENCES `categorias` (`id`) ON DELETE RESTRICT,
  CONSTRAINT `fk_lancamento_usuario` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

COMMIT;
