-- =====================================================
-- BANCO DE DADOS: OFFICE - Catálogo Premium de Óculos
-- Versão: 1.0
-- MySQL 8+
-- =====================================================

CREATE DATABASE IF NOT EXISTS office_db
  DEFAULT CHARACTER SET utf8mb4
  DEFAULT COLLATE utf8mb4_unicode_ci;

USE office_db;

-- =====================================================
-- TABELA: usuarios (admin)
-- =====================================================
CREATE TABLE usuarios (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  nome VARCHAR(120) NOT NULL,
  email VARCHAR(160) NOT NULL UNIQUE,
  senha VARCHAR(255) NOT NULL,
  perfil ENUM('admin','editor') NOT NULL DEFAULT 'admin',
  ativo TINYINT(1) NOT NULL DEFAULT 1,
  ultimo_login DATETIME NULL,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB;

-- =====================================================
-- TABELA: categorias
-- =====================================================
CREATE TABLE categorias (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  nome VARCHAR(120) NOT NULL,
  slug VARCHAR(160) NOT NULL UNIQUE,
  descricao TEXT NULL,
  ordem INT NOT NULL DEFAULT 0,
  ativo TINYINT(1) NOT NULL DEFAULT 1,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  INDEX idx_cat_slug (slug),
  INDEX idx_cat_ativo (ativo)
) ENGINE=InnoDB;

-- =====================================================
-- TABELA: colecoes
-- =====================================================
CREATE TABLE colecoes (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  nome VARCHAR(120) NOT NULL,
  slug VARCHAR(160) NOT NULL UNIQUE,
  descricao TEXT NULL,
  ano SMALLINT NULL,
  ordem INT NOT NULL DEFAULT 0,
  ativo TINYINT(1) NOT NULL DEFAULT 1,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  INDEX idx_col_slug (slug),
  INDEX idx_col_ativo (ativo)
) ENGINE=InnoDB;

-- =====================================================
-- TABELA: produtos
-- =====================================================
CREATE TABLE produtos (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  categoria_id INT UNSIGNED NULL,
  colecao_id INT UNSIGNED NULL,
  nome VARCHAR(180) NOT NULL,
  slug VARCHAR(220) NOT NULL UNIQUE,
  sku VARCHAR(60) NOT NULL UNIQUE,
  descricao_curta VARCHAR(500) NULL,
  descricao_completa TEXT NULL,
  material_armacao VARCHAR(120) NULL,
  tipo_lente VARCHAR(120) NULL,
  protecao_uv VARCHAR(60) NULL,
  polarizado TINYINT(1) NOT NULL DEFAULT 0,
  medidas VARCHAR(120) NULL,
  preco DECIMAL(10,2) NULL,
  mostrar_preco TINYINT(1) NOT NULL DEFAULT 0,
  destaque TINYINT(1) NOT NULL DEFAULT 0,
  ativo TINYINT(1) NOT NULL DEFAULT 1,
  ordem INT NOT NULL DEFAULT 0,
  meta_titulo VARCHAR(180) NULL,
  meta_descricao VARCHAR(300) NULL,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  CONSTRAINT fk_prod_cat FOREIGN KEY (categoria_id) REFERENCES categorias(id) ON DELETE SET NULL,
  CONSTRAINT fk_prod_col FOREIGN KEY (colecao_id) REFERENCES colecoes(id) ON DELETE SET NULL,
  INDEX idx_prod_slug (slug),
  INDEX idx_prod_sku (sku),
  INDEX idx_prod_ativo (ativo),
  INDEX idx_prod_destaque (destaque),
  FULLTEXT idx_prod_busca (nome, sku, descricao_curta, descricao_completa)
) ENGINE=InnoDB;

-- =====================================================
-- TABELA: produto_variacoes
-- (cores, armação específica, detalhes por variação)
-- =====================================================
CREATE TABLE produto_variacoes (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  produto_id INT UNSIGNED NOT NULL,
  cor VARCHAR(80) NULL,
  cor_hex VARCHAR(10) NULL,
  cor_lente VARCHAR(80) NULL,
  sku_variacao VARCHAR(80) NULL,
  estoque INT NOT NULL DEFAULT 0,
  ativo TINYINT(1) NOT NULL DEFAULT 1,
  ordem INT NOT NULL DEFAULT 0,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  CONSTRAINT fk_var_prod FOREIGN KEY (produto_id) REFERENCES produtos(id) ON DELETE CASCADE,
  INDEX idx_var_prod (produto_id)
) ENGINE=InnoDB;

-- =====================================================
-- TABELA: produto_imagens
-- =====================================================
CREATE TABLE produto_imagens (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  produto_id INT UNSIGNED NOT NULL,
  arquivo VARCHAR(255) NOT NULL,
  alt VARCHAR(180) NULL,
  principal TINYINT(1) NOT NULL DEFAULT 0,
  ordem INT NOT NULL DEFAULT 0,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  CONSTRAINT fk_img_prod FOREIGN KEY (produto_id) REFERENCES produtos(id) ON DELETE CASCADE,
  INDEX idx_img_prod (produto_id),
  INDEX idx_img_principal (principal)
) ENGINE=InnoDB;

-- =====================================================
-- TABELA: pedidos
-- =====================================================
CREATE TABLE pedidos (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  codigo VARCHAR(20) NOT NULL UNIQUE,
  cliente_nome VARCHAR(160) NOT NULL,
  cliente_empresa VARCHAR(160) NULL,
  cliente_telefone VARCHAR(30) NOT NULL,
  cliente_email VARCHAR(160) NOT NULL,
  cliente_cidade VARCHAR(120) NULL,
  cliente_estado VARCHAR(2) NULL,
  cliente_documento VARCHAR(20) NULL,
  observacoes TEXT NULL,
  total_itens INT NOT NULL DEFAULT 0,
  total_produtos DECIMAL(10,2) NULL,
  status ENUM('novo','em_analise','aprovado','enviado','concluido','cancelado') NOT NULL DEFAULT 'novo',
  ip_cliente VARCHAR(45) NULL,
  user_agent VARCHAR(255) NULL,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  INDEX idx_ped_status (status),
  INDEX idx_ped_codigo (codigo),
  INDEX idx_ped_email (cliente_email)
) ENGINE=InnoDB;

-- =====================================================
-- TABELA: pedido_itens
-- =====================================================
CREATE TABLE pedido_itens (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  pedido_id INT UNSIGNED NOT NULL,
  produto_id INT UNSIGNED NULL,
  variacao_id INT UNSIGNED NULL,
  produto_nome VARCHAR(180) NOT NULL,
  produto_sku VARCHAR(80) NOT NULL,
  variacao_descricao VARCHAR(160) NULL,
  quantidade INT NOT NULL DEFAULT 1,
  preco_unitario DECIMAL(10,2) NULL,
  subtotal DECIMAL(10,2) NULL,
  CONSTRAINT fk_item_ped FOREIGN KEY (pedido_id) REFERENCES pedidos(id) ON DELETE CASCADE,
  CONSTRAINT fk_item_prod FOREIGN KEY (produto_id) REFERENCES produtos(id) ON DELETE SET NULL,
  CONSTRAINT fk_item_var FOREIGN KEY (variacao_id) REFERENCES produto_variacoes(id) ON DELETE SET NULL,
  INDEX idx_item_ped (pedido_id)
) ENGINE=InnoDB;

-- =====================================================
-- TABELA: configuracoes (singleton - 1 linha)
-- =====================================================
CREATE TABLE configuracoes (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  marca_nome VARCHAR(120) NOT NULL DEFAULT 'OFFICE',
  marca_slogan VARCHAR(200) NULL,
  marca_logo VARCHAR(255) NULL,
  marca_favicon VARCHAR(255) NULL,
  cor_primaria VARCHAR(10) NOT NULL DEFAULT '#0A0A0A',
  cor_secundaria VARCHAR(10) NOT NULL DEFAULT '#C9A55C',
  cor_texto VARCHAR(10) NOT NULL DEFAULT '#1A1A1A',
  banner_principal VARCHAR(255) NULL,
  banner_titulo VARCHAR(200) NULL,
  banner_subtitulo VARCHAR(300) NULL,
  sobre_titulo VARCHAR(200) NULL,
  sobre_texto TEXT NULL,
  contato_email VARCHAR(160) NULL,
  contato_telefone VARCHAR(30) NULL,
  contato_whatsapp VARCHAR(30) NULL,
  contato_endereco VARCHAR(300) NULL,
  instagram VARCHAR(160) NULL,
  facebook VARCHAR(160) NULL,
  tiktok VARCHAR(160) NULL,
  email_remetente VARCHAR(160) NULL,
  email_notificacao VARCHAR(160) NULL,
  meta_titulo VARCHAR(180) NULL,
  meta_descricao VARCHAR(300) NULL,
  updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB;

-- =====================================================
-- TABELA: catalogos_pdf (histórico de PDFs gerados)
-- =====================================================
CREATE TABLE catalogos_pdf (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  titulo VARCHAR(180) NOT NULL,
  arquivo VARCHAR(255) NOT NULL,
  tipo ENUM('completo','categoria','colecao','personalizado') NOT NULL DEFAULT 'completo',
  filtro_id INT UNSIGNED NULL,
  total_produtos INT NOT NULL DEFAULT 0,
  tamanho_kb INT NULL,
  gerado_por INT UNSIGNED NULL,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  CONSTRAINT fk_pdf_user FOREIGN KEY (gerado_por) REFERENCES usuarios(id) ON DELETE SET NULL,
  INDEX idx_pdf_tipo (tipo)
) ENGINE=InnoDB;

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

-- Usuário admin padrão (senha: admin123)
INSERT INTO usuarios (nome, email, senha, perfil) VALUES
('Administrador', 'admin@office.com.br', '$2y$10$NVKTPNneNYi2n28QRtY3ku55ns4CkuxP10fI3cJ2WpI.VKnOdfhZi', 'admin');

-- Configurações iniciais
INSERT INTO configuracoes (
  marca_nome, marca_slogan, cor_primaria, cor_secundaria, cor_texto,
  banner_titulo, banner_subtitulo,
  sobre_titulo, sobre_texto,
  contato_email, contato_telefone, contato_whatsapp,
  meta_titulo, meta_descricao
) VALUES (
  'OFFICE',
  'Coleção exclusiva de óculos de sol',
  '#0A0A0A', '#C9A55C', '#1A1A1A',
  'Elegância em cada olhar',
  'Descubra a nova coleção OFFICE — design contemporâneo, materiais premium e proteção máxima.',
  'Sobre a OFFICE',
  'A OFFICE nasceu da busca por peças que unem sofisticação, design autoral e a qualidade das melhores marcas do mundo. Cada óculos é pensado para quem valoriza detalhes, durabilidade e um estilo atemporal.',
  'contato@office.com.br', '(44) 0000-0000', '5544000000000',
  'OFFICE | Óculos de Sol Premium',
  'Coleção premium de óculos de sol. Design contemporâneo, lentes de alta proteção e estilo atemporal.'
);

-- Categorias exemplo
INSERT INTO categorias (nome, slug, descricao, ordem) VALUES
('Masculino', 'masculino', 'Modelos masculinos', 1),
('Feminino', 'feminino', 'Modelos femininos', 2),
('Unissex', 'unissex', 'Modelos unissex', 3),
('Esportivo', 'esportivo', 'Linha esportiva', 4);

-- Coleções exemplo
INSERT INTO colecoes (nome, slug, descricao, ano, ordem) VALUES
('Verão 2026', 'verao-2026', 'Coleção Verão 2026', 2026, 1),
('Classic', 'classic', 'Linha atemporal', 2025, 2),
('Premium Gold', 'premium-gold', 'Série especial em dourado', 2025, 3);
