CREATE TABLE IF NOT EXISTS usuarios (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(120) NOT NULL,
    email VARCHAR(190) NOT NULL,
    senha VARCHAR(255) NOT NULL,
    tipo ENUM('admin','user') NOT NULL DEFAULT 'user',
    criado_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    atualizado_em TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uq_usuarios_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS livros (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    usuario_id INT UNSIGNED NOT NULL,
    titulo VARCHAR(220) NOT NULL,
    subtitulo VARCHAR(220) NULL,
    autor VARCHAR(160) NOT NULL,
    cidade VARCHAR(120) NULL,
    ano VARCHAR(10) NULL,
    tema VARCHAR(255) NOT NULL,
    assunto TEXT NULL,
    objetivo TEXT NULL,
    publico TEXT NULL,
    estilo ENUM('Tecnico','Academico','Narrativo','Didatico','Cientifico') NOT NULL,
    tom ENUM('Formal','Motivacional','Cientifico','Simples') NOT NULL DEFAULT 'Formal',
    paginas_min INT UNSIGNED NOT NULL DEFAULT 100,
    status ENUM('Em andamento','Concluído','Erro') NOT NULL DEFAULT 'Em andamento',
    progresso TINYINT UNSIGNED NOT NULL DEFAULT 0,
    palavras_total INT UNSIGNED NOT NULL DEFAULT 0,
    config_json MEDIUMTEXT NULL,
    data_criacao TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    data_atualizacao TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
    CONSTRAINT fk_livros_usuario FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE,
    KEY idx_livros_usuario (usuario_id),
    KEY idx_livros_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS capitulos (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    livro_id INT UNSIGNED NOT NULL,
    ordem INT UNSIGNED NOT NULL,
    titulo VARCHAR(220) NOT NULL,
    conteudo_html MEDIUMTEXT NULL,
    palavras INT UNSIGNED NOT NULL DEFAULT 0,
    data_atualizacao TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
    CONSTRAINT fk_capitulos_livro FOREIGN KEY (livro_id) REFERENCES livros(id) ON DELETE CASCADE,
    UNIQUE KEY uq_capitulos_livro_ordem (livro_id, ordem),
    KEY idx_capitulos_livro (livro_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS livro_jobs (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    livro_id INT UNSIGNED NOT NULL,
    status ENUM('Pendente','Rodando','Concluído','Erro') NOT NULL DEFAULT 'Pendente',
    progresso TINYINT UNSIGNED NOT NULL DEFAULT 0,
    estado_json MEDIUMTEXT NULL,
    erro TEXT NULL,
    criado_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    atualizado_em TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
    CONSTRAINT fk_livro_jobs_livro FOREIGN KEY (livro_id) REFERENCES livros(id) ON DELETE CASCADE,
    UNIQUE KEY uq_livro_jobs_livro (livro_id),
    KEY idx_livro_jobs_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS capitulos_versoes (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    capitulo_id INT UNSIGNED NOT NULL,
    conteudo_html MEDIUMTEXT NOT NULL,
    criado_por INT UNSIGNED NULL,
    criado_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT fk_capitulos_versoes_capitulo FOREIGN KEY (capitulo_id) REFERENCES capitulos(id) ON DELETE CASCADE,
    CONSTRAINT fk_capitulos_versoes_usuario FOREIGN KEY (criado_por) REFERENCES usuarios(id) ON DELETE SET NULL,
    KEY idx_capitulos_versoes_capitulo (capitulo_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS livros_compartilhamentos (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    livro_id INT UNSIGNED NOT NULL,
    token CHAR(40) NOT NULL,
    publico TINYINT(1) NOT NULL DEFAULT 1,
    downloads INT UNSIGNED NOT NULL DEFAULT 0,
    criado_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    expira_em TIMESTAMP NULL DEFAULT NULL,
    CONSTRAINT fk_livros_comp_livro FOREIGN KEY (livro_id) REFERENCES livros(id) ON DELETE CASCADE,
    UNIQUE KEY uq_livros_comp_token (token),
    KEY idx_livros_comp_livro (livro_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

