-- Criar tabela de templates de design
CREATE TABLE IF NOT EXISTS design_templates (
    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
    nome VARCHAR(255) NOT NULL,
    descricao TEXT,
    tipo VARCHAR(50) NOT NULL CHECK (tipo IN ('capa', 'indice', 'divisora', 'cabecalho', 'rodape', 'guia_estilo')),
    config JSONB NOT NULL DEFAULT '{}',
    ativo BOOLEAN DEFAULT TRUE,
    criado_por UUID REFERENCES auth.users(id) ON DELETE SET NULL,
    criado_em TIMESTAMP DEFAULT NOW(),
    atualizado_em TIMESTAMP DEFAULT NOW(),
    UNIQUE(nome)
);

-- Criar índices
CREATE INDEX idx_design_templates_tipo ON design_templates(tipo);
CREATE INDEX idx_design_templates_ativo ON design_templates(ativo);
CREATE INDEX idx_design_templates_criado_por ON design_templates(criado_por);

-- Desabilitar RLS para desenvolvimento
ALTER TABLE design_templates DISABLE ROW LEVEL SECURITY;

-- Inserir templates padrão
INSERT INTO design_templates (nome, descricao, tipo, config) VALUES
(
    'Capa Padrão',
    'Template padrão para capa frontal do databook',
    'capa',
    '{
        "corPrimaria": "#1a365d",
        "corSecundaria": "#2b6cb0",
        "titulo": "BUZIOS 7 PRODUCTION SYSTEM DEVELOPMENT",
        "subtitulo": "AR HEAD FABRICATION LONG",
        "cliente": "SAIPEM",
        "numeroDocumento": "DB-B97-01_S1_VENDOR_DATABOOK",
        "contrato": "OC 1472739",
        "fornecedor": "ENGEMETAL"
    }'
),
(
    'Índice Bilíngue',
    'Template de índice com suporte a português e inglês',
    'indice',
    '{
        "corTitulo": "#1a365d",
        "corLinha": "#2b6cb0",
        "bilingue": true,
        "titulo": "ÍNDICE / TABLE OF CONTENTS"
    }'
),
(
    'Divisora Minimalista',
    'Template minimalista para divisoras de seção',
    'divisora',
    '{
        "estilo": "minimalista",
        "corPrimaria": "#1a365d",
        "corSecundaria": "#2b6cb0",
        "bilingue": true,
        "icone": "📑"
    }'
),
(
    'Divisora Lateral',
    'Template com barra lateral para divisoras',
    'divisora',
    '{
        "estilo": "lateral",
        "corPrimaria": "#1a365d",
        "corSecundaria": "#2b6cb0",
        "bilingue": true,
        "icone": "📑"
    }'
),
(
    'Divisora Corporativa',
    'Template corporativo para divisoras',
    'divisora',
    '{
        "estilo": "corporativa",
        "corPrimaria": "#1a365d",
        "corSecundaria": "#2b6cb0",
        "bilingue": true,
        "icone": "📑"
    }'
),
(
    'Cabeçalho Padrão',
    'Template padrão para cabeçalho de página',
    'cabecalho',
    '{
        "corBorda": "#2b6cb0",
        "altura": 60,
        "estilo": "simples"
    }'
),
(
    'Rodapé Padrão',
    'Template padrão para rodapé de página',
    'rodape',
    '{
        "corBorda": "#cbd5e0",
        "altura": 40,
        "estilo": "simples",
        "mostrarPagina": true
    }'
),
(
    'Guia de Estilo Padrão',
    'Template de guia de estilo completo',
    'guia_estilo',
    '{
        "corPrimaria": "#1a365d",
        "corSecundaria": "#2b6cb0",
        "corDestaque": "#4299e1",
        "fontePrincipal": "Roboto",
        "fonteSecundaria": "Open Sans",
        "incluirPaleta": true,
        "incluirTipografia": true
    }'
)
ON CONFLICT (nome) DO NOTHING;

-- Criar tabela de aplicação de templates a databooks
CREATE TABLE IF NOT EXISTS databook_design_aplicacoes (
    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
    databook_id UUID NOT NULL REFERENCES projetos(id) ON DELETE CASCADE,
    template_capa_id UUID REFERENCES design_templates(id) ON DELETE SET NULL,
    template_indice_id UUID REFERENCES design_templates(id) ON DELETE SET NULL,
    template_divisora_id UUID REFERENCES design_templates(id) ON DELETE SET NULL,
    template_cabecalho_id UUID REFERENCES design_templates(id) ON DELETE SET NULL,
    template_rodape_id UUID REFERENCES design_templates(id) ON DELETE SET NULL,
    template_guia_estilo_id UUID REFERENCES design_templates(id) ON DELETE SET NULL,
    aplicado_em TIMESTAMP DEFAULT NOW(),
    atualizado_em TIMESTAMP DEFAULT NOW(),
    UNIQUE(databook_id)
);

-- Criar índices
CREATE INDEX idx_databook_design_aplicacoes_databook ON databook_design_aplicacoes(databook_id);

-- Desabilitar RLS
ALTER TABLE databook_design_aplicacoes DISABLE ROW LEVEL SECURITY;

-- Criar trigger para atualizar atualizado_em
CREATE OR REPLACE FUNCTION update_design_templates_updated_at()
RETURNS TRIGGER AS $$
BEGIN
    NEW.atualizado_em = NOW();
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER update_design_templates_updated_at_trigger
BEFORE UPDATE ON design_templates
FOR EACH ROW
EXECUTE FUNCTION update_design_templates_updated_at();

CREATE TRIGGER update_databook_design_aplicacoes_updated_at_trigger
BEFORE UPDATE ON databook_design_aplicacoes
FOR EACH ROW
EXECUTE FUNCTION update_design_templates_updated_at();
