-- Banco de Dados: Sistema de Gestão Imobiliária
-- Autor: Sistema Dashboard Imobiliário
-- Data: 2024-01-01

START TRANSACTION;


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

--
-- Estrutura da tabela `imoveis`
--

CREATE TABLE `imoveis` (
  `id` int(11) NOT NULL,
  `codigo` varchar(20) NOT NULL,
  `titulo` varchar(200) NOT NULL,
  `descricao` text DEFAULT NULL,
  `tipo` enum('apartamento','casa','terreno','comercial','sala','galpao','fazenda') NOT NULL,
  `endereco` varchar(200) NOT NULL,
  `bairro` varchar(100) NOT NULL,
  `cidade` varchar(100) NOT NULL,
  `estado` char(2) NOT NULL,
  `cep` varchar(10) DEFAULT NULL,
  `quartos` int(11) DEFAULT 0,
  `banheiros` int(11) DEFAULT 0,
  `vagas` int(11) DEFAULT 0,
  `area_util` decimal(10,2) DEFAULT 0.00,
  `area_total` decimal(10,2) DEFAULT 0.00,
  `valor_compra` decimal(15,2) NOT NULL,
  `valor_atual` decimal(15,2) DEFAULT NULL,
  `valor_aluguel` decimal(10,2) DEFAULT NULL,
  `data_compra` date DEFAULT NULL,
  `status` enum('disponivel','alugado','manutencao','venda','arquivado') NOT NULL DEFAULT 'disponivel',
  `taxa_adm` decimal(5,2) DEFAULT 8.00,
  `observacoes` text DEFAULT NULL,
  `fotos` text DEFAULT NULL,
  `documentos` text DEFAULT NULL,
  `usuario_id` int(11) DEFAULT NULL,
  `data_criacao` datetime NOT NULL,
  `data_atualizacao` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estrutura da tabela `locacoes`
--

CREATE TABLE `locacoes` (
  `id` int(11) NOT NULL,
  `imovel_id` int(11) NOT NULL,
  `locatario_nome` varchar(100) NOT NULL,
  `locatario_cpf` varchar(14) DEFAULT NULL,
  `locatario_email` varchar(100) DEFAULT NULL,
  `locatario_telefone` varchar(20) DEFAULT NULL,
  `valor_aluguel` decimal(10,2) NOT NULL,
  `valor_condominio` decimal(10,2) DEFAULT 0.00,
  `valor_iptu` decimal(10,2) DEFAULT 0.00,
  `dia_vencimento` int(11) NOT NULL DEFAULT 5,
  `data_inicio` date NOT NULL,
  `data_fim` date DEFAULT NULL,
  `contrato_path` varchar(255) DEFAULT NULL,
  `status` enum('ativa','encerrada','cancelada','pendente') NOT NULL DEFAULT 'pendente',
  `observacoes` text DEFAULT NULL,
  `usuario_id` int(11) DEFAULT NULL,
  `data_criacao` datetime NOT NULL,
  `data_atualizacao` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estrutura da tabela `financeiro`
--

CREATE TABLE `financeiro` (
  `id` int(11) NOT NULL,
  `tipo` enum('receita','despesa') NOT NULL,
  `categoria` varchar(50) NOT NULL,
  `descricao` varchar(200) NOT NULL,
  `valor` decimal(10,2) NOT NULL,
  `data_vencimento` date NOT NULL,
  `data_pagamento` date DEFAULT NULL,
  `forma_pagamento` enum('dinheiro','pix','ted','boleto','cartao','debito') DEFAULT NULL,
  `status` enum('pendente','pago','cancelado','atrasado') NOT NULL DEFAULT 'pendente',
  `imovel_id` int(11) DEFAULT NULL,
  `locacao_id` int(11) DEFAULT NULL,
  `observacoes` text DEFAULT NULL,
  `comprovante_path` varchar(255) DEFAULT NULL,
  `usuario_id` int(11) DEFAULT NULL,
  `data_criacao` datetime NOT NULL,
  `data_atualizacao` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estrutura da tabela `configuracoes`
--

CREATE TABLE `configuracoes` (
  `id` int(11) NOT NULL,
  `chave` varchar(100) NOT NULL,
  `valor` text DEFAULT NULL,
  `tipo` enum('texto','numero','booleano','json','cor','senha') NOT NULL DEFAULT 'texto',
  `descricao` varchar(200) DEFAULT NULL,
  `categoria` varchar(50) DEFAULT 'geral',
  `ordem` int(11) DEFAULT 0,
  `data_criacao` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estrutura da tabela `logs`
--

CREATE TABLE `logs` (
  `id` int(11) NOT NULL,
  `usuario_id` int(11) DEFAULT NULL,
  `acao` varchar(100) NOT NULL,
  `tabela` varchar(50) DEFAULT NULL,
  `registro_id` int(11) DEFAULT NULL,
  `dados_anteriores` text DEFAULT NULL,
  `dados_novos` text DEFAULT NULL,
  `ip` varchar(45) DEFAULT NULL,
  `user_agent` text DEFAULT NULL,
  `data_criacao` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estrutura da tabela `relatorios`
--

CREATE TABLE `relatorios` (
  `id` int(11) NOT NULL,
  `titulo` varchar(200) NOT NULL,
  `tipo` varchar(50) NOT NULL,
  `filtros` text DEFAULT NULL,
  `dados` longtext DEFAULT NULL,
  `formato` enum('pdf','excel','html','json') NOT NULL DEFAULT 'html',
  `usuario_id` int(11) DEFAULT NULL,
  `data_criacao` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estrutura da tabela `notificacoes`
--

CREATE TABLE `notificacoes` (
  `id` int(11) NOT NULL,
  `usuario_id` int(11) DEFAULT NULL,
  `titulo` varchar(200) NOT NULL,
  `mensagem` text DEFAULT NULL,
  `tipo` enum('info','success','warning','danger') NOT NULL DEFAULT 'info',
  `lida` tinyint(1) DEFAULT 0,
  `link` varchar(255) DEFAULT NULL,
  `data_criacao` datetime NOT NULL,
  `data_leitura` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estrutura da tabela `indicadores`
--

CREATE TABLE `indicadores` (
  `id` int(11) NOT NULL,
  `nome` varchar(100) NOT NULL,
  `valor` decimal(10,4) NOT NULL,
  `tipo` enum('yield','ocupacao','endividamento','lucratividade','outro') NOT NULL,
  `periodo` enum('diario','mensal','trimestral','anual') NOT NULL DEFAULT 'mensal',
  `data_referencia` date NOT NULL,
  `data_criacao` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estrutura da tabela `backups`
--

CREATE TABLE `backups` (
  `id` int(11) NOT NULL,
  `nome_arquivo` varchar(255) NOT NULL,
  `tamanho` bigint(20) DEFAULT 0,
  `tipo` enum('completo','parcial','dados','schema') NOT NULL DEFAULT 'completo',
  `usuario_id` int(11) DEFAULT NULL,
  `observacoes` text DEFAULT NULL,
  `data_criacao` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estrutura da tabela `dados_amostra`
--

CREATE TABLE `dados_amostra` (
  `id` int(11) NOT NULL,
  `tipo` varchar(50) NOT NULL,
  `descricao` text NOT NULL,
  `ativo` tinyint(1) DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Índices para tabela `imoveis`
--
ALTER TABLE `imoveis`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `codigo` (`codigo`),
  ADD KEY `usuario_id` (`usuario_id`),
  ADD KEY `status` (`status`),
  ADD KEY `cidade` (`cidade`),
  ADD KEY `tipo` (`tipo`);

--
-- Índices para tabela `locacoes`
--
ALTER TABLE `locacoes`
  ADD PRIMARY KEY (`id`),
  ADD KEY `imovel_id` (`imovel_id`),
  ADD KEY `locatario_cpf` (`locatario_cpf`),
  ADD KEY `status` (`status`);

--
-- Índices para tabela `financeiro`
--
ALTER TABLE `financeiro`
  ADD PRIMARY KEY (`id`),
  ADD KEY `tipo` (`tipo`),
  ADD KEY `categoria` (`categoria`),
  ADD KEY `status` (`status`),
  ADD KEY `imovel_id` (`imovel_id`),
  ADD KEY `data_vencimento` (`data_vencimento`);

--
-- Índices para tabela `configuracoes`
--
ALTER TABLE `configuracoes`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `chave` (`chave`);

--
-- Índices para tabela `logs`
--
ALTER TABLE `logs`
  ADD PRIMARY KEY (`id`),
  ADD KEY `usuario_id` (`usuario_id`),
  ADD KEY `acao` (`acao`),
  ADD KEY `tabela` (`tabela`),
  ADD KEY `data_criacao` (`data_criacao`);

--
-- Índices para tabela `relatorios`
--
ALTER TABLE `relatorios`
  ADD PRIMARY KEY (`id`),
  ADD KEY `usuario_id` (`usuario_id`),
  ADD KEY `tipo` (`tipo`);

--
-- Índices para tabela `notificacoes`
--
ALTER TABLE `notificacoes`
  ADD PRIMARY KEY (`id`),
  ADD KEY `usuario_id` (`usuario_id`),
  ADD KEY `lida` (`lida`);

--
-- Índices para tabela `indicadores`
--
ALTER TABLE `indicadores`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `nome_periodo_data` (`nome`,`periodo`,`data_referencia`);

--
-- Índices para tabela `backups`
--
ALTER TABLE `backups`
  ADD PRIMARY KEY (`id`),
  ADD KEY `usuario_id` (`usuario_id`);

--
-- Índices para tabela `dados_amostra`
--
ALTER TABLE `dados_amostra`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT para tabela `imoveis`
--
ALTER TABLE `imoveis`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT para tabela `locacoes`
--
ALTER TABLE `locacoes`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT para tabela `financeiro`
--
ALTER TABLE `financeiro`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT para tabela `configuracoes`
--
ALTER TABLE `configuracoes`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT para tabela `logs`
--
ALTER TABLE `logs`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT para tabela `relatorios`
--
ALTER TABLE `relatorios`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT para tabela `notificacoes`
--
ALTER TABLE `notificacoes`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT para tabela `indicadores`
--
ALTER TABLE `indicadores`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT para tabela `backups`
--
ALTER TABLE `backups`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT para tabela `dados_amostra`
--
ALTER TABLE `dados_amostra`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- Restrições para tabelas
--

--
-- Restrições para tabelas `imoveis`
--
ALTER TABLE `imoveis`
  ADD CONSTRAINT `imoveis_ibfk_1` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`) ON DELETE SET NULL;

--
-- Restrições para tabelas `locacoes`
--
ALTER TABLE `locacoes`
  ADD CONSTRAINT `locacoes_ibfk_1` FOREIGN KEY (`imovel_id`) REFERENCES `imoveis` (`id`) ON DELETE CASCADE;

--
-- Restrições para tabelas `financeiro`
--
ALTER TABLE `financeiro`
  ADD CONSTRAINT `financeiro_ibfk_1` FOREIGN KEY (`imovel_id`) REFERENCES `imoveis` (`id`) ON DELETE SET NULL,
  ADD CONSTRAINT `financeiro_ibfk_2` FOREIGN KEY (`locacao_id`) REFERENCES `locacoes` (`id`) ON DELETE SET NULL;

--
-- Restrições para tabelas `logs`
--
ALTER TABLE `logs`
  ADD CONSTRAINT `logs_ibfk_1` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`) ON DELETE SET NULL;

--
-- Restrições para tabelas `relatorios`
--
ALTER TABLE `relatorios`
  ADD CONSTRAINT `relatorios_ibfk_1` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`) ON DELETE SET NULL;

--
-- Restrições para tabelas `notificacoes`
--
ALTER TABLE `notificacoes`
  ADD CONSTRAINT `notificacoes_ibfk_1` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`) ON DELETE CASCADE;

--
-- Restrições para tabelas `backups`
--
ALTER TABLE `backups`
  ADD CONSTRAINT `backups_ibfk_1` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`) ON DELETE SET NULL;
COMMIT;


-- Inserir configurações padrão
INSERT INTO `configuracoes` (`chave`, `valor`, `tipo`, `descricao`, `categoria`) VALUES
('empresa_nome', 'Minha Imobiliária', 'texto', 'Nome da empresa', 'geral'),
('empresa_email', 'contato@imobiliaria.com', 'texto', 'E-mail da empresa', 'geral'),
('empresa_telefone', '(11) 99999-9999', 'texto', 'Telefone da empresa', 'geral'),
('empresa_cnpj', '', 'texto', 'CNPJ da empresa', 'geral'),
('moeda', 'BRL', 'texto', 'Moeda padrão', 'financeiro'),
('taxa_adm', '8.00', 'numero', 'Taxa de administração (%)', 'financeiro'),
('cor_primaria', '#3498db', 'cor', 'Cor primária do sistema', 'aparencia'),
('cor_secundaria', '#2c3e50', 'cor', 'Cor secundária do sistema', 'aparencia'),
('timezone', 'America/Sao_Paulo', 'texto', 'Fuso horário', 'sistema');

-- Inserir categorias financeiras padrão
INSERT INTO `configuracoes` (`chave`, `valor`, `tipo`, `descricao`, `categoria`) VALUES
('categoria_receita_aluguel', 'Aluguel', 'texto', 'Categoria para receitas de aluguel', 'financeiro'),
('categoria_receita_venda', 'Venda', 'texto', 'Categoria para receitas de venda', 'financeiro'),
('categoria_despesa_condominio', 'Condomínio', 'texto', 'Categoria para despesas de condomínio', 'financeiro'),
('categoria_despesa_iptu', 'IPTU', 'texto', 'Categoria para despesas de IPTU', 'financeiro'),
('categoria_despesa_manutencao', 'Manutenção', 'texto', 'Categoria para despesas de manutenção', 'financeiro'),
('categoria_despesa_financiamento', 'Financiamento', 'texto', 'Categoria para despesas de financiamento', 'financeiro');