-- +goose Up
-- +goose StatementBegin

-- =============================================================================
-- 055_layouts_tshirts.sql
-- Módulo: Gerenciador de Layouts de Camisetas
-- Tabelas: layout_categorias, layout_templates, layout_logos, layouts_camisetas
-- =============================================================================

-- ── Categorias de modelos (Escolar, Esportivo, Empresarial, etc.) ─────────────
CREATE TABLE IF NOT EXISTS layout_categorias (
    id          UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    tenant_id   UUID NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
    nome        VARCHAR(100)  NOT NULL,
    descricao   TEXT          DEFAULT '',
    cor         VARCHAR(20)   DEFAULT '#c98a4b',  -- cor de destaque da categoria
    icone       VARCHAR(50)   DEFAULT '👕',        -- emoji ou nome do ícone
    ordem       INT           DEFAULT 0,
    ativo       BOOLEAN       DEFAULT TRUE,
    criado_em   TIMESTAMPTZ   DEFAULT NOW(),
    atualizado_em TIMESTAMPTZ DEFAULT NOW()
);

-- ── Templates SVG por categoria (modelos criados no CorelDRAW) ────────────────
CREATE TABLE IF NOT EXISTS layout_templates (
    id              UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    tenant_id       UUID NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
    categoria_id    UUID REFERENCES layout_categorias(id) ON DELETE SET NULL,
    nome            VARCHAR(150) NOT NULL,
    descricao       TEXT         DEFAULT '',
    -- Caminhos dos arquivos SVG nas três vistas
    svg_frente      VARCHAR(500) DEFAULT '',  -- ex: /uploads/templates/uuid_frente.svg
    svg_costas      VARCHAR(500) DEFAULT '',
    svg_lateral     VARCHAR(500) DEFAULT '',
    -- Metadados do modelo
    tipo_gola       VARCHAR(50)  DEFAULT '',  -- crew | v | polo | button | zip | racer
    tipo_manga      VARCHAR(50)  DEFAULT '',  -- short | long | none
    tem_paineis_laterais BOOLEAN DEFAULT FALSE,
    ativo           BOOLEAN      DEFAULT TRUE,
    criado_por      UUID         REFERENCES users(id) ON DELETE SET NULL,
    criado_em       TIMESTAMPTZ  DEFAULT NOW(),
    atualizado_em   TIMESTAMPTZ  DEFAULT NOW()
);

-- ── Biblioteca de logos dos clientes ─────────────────────────────────────────
CREATE TABLE IF NOT EXISTS layout_logos (
    id          UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    tenant_id   UUID NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
    nome        VARCHAR(200) NOT NULL,
    arquivo_url VARCHAR(500) NOT NULL,  -- ex: /uploads/logos-biblioteca/uuid_logo.svg
    formato     VARCHAR(20)  DEFAULT 'svg',  -- svg | png
    cliente_id  UUID REFERENCES clientes(id) ON DELETE SET NULL,
    criado_por  UUID REFERENCES users(id) ON DELETE SET NULL,
    criado_em   TIMESTAMPTZ DEFAULT NOW()
);

-- ── Layouts salvos (state completo do editor) ─────────────────────────────────
CREATE TABLE IF NOT EXISTS layouts_camisetas (
    id              UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    tenant_id       UUID NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
    nome            VARCHAR(200) NOT NULL DEFAULT 'Layout sem título',
    cliente_id      UUID REFERENCES clientes(id) ON DELETE SET NULL,
    pedido_id       UUID REFERENCES pedidos(id) ON DELETE SET NULL,
    template_id     UUID REFERENCES layout_templates(id) ON DELETE SET NULL,
    -- State completo do editor (JSON)
    state           JSONB NOT NULL DEFAULT '{}',
    -- Resumo denormalizado para listagem rápida (sem abrir o state)
    modelo_nome     VARCHAR(200) DEFAULT '',
    tamanho         VARCHAR(20)  DEFAULT 'M',
    numero_pedido   VARCHAR(50)  DEFAULT '',
    -- PDF gerado
    pdf_url         VARCHAR(500) DEFAULT '',
    -- Status
    status          VARCHAR(50)  DEFAULT 'rascunho',  -- rascunho | aprovado | em_producao
    criado_por      UUID REFERENCES users(id) ON DELETE SET NULL,
    criado_em       TIMESTAMPTZ  DEFAULT NOW(),
    atualizado_em   TIMESTAMPTZ  DEFAULT NOW()
);

-- ── Índices ───────────────────────────────────────────────────────────────────
CREATE INDEX IF NOT EXISTS idx_layout_categorias_tenant    ON layout_categorias(tenant_id, ativo);
CREATE INDEX IF NOT EXISTS idx_layout_templates_tenant     ON layout_templates(tenant_id, ativo);
CREATE INDEX IF NOT EXISTS idx_layout_templates_categoria  ON layout_templates(categoria_id);
CREATE INDEX IF NOT EXISTS idx_layout_logos_tenant         ON layout_logos(tenant_id);
CREATE INDEX IF NOT EXISTS idx_layout_logos_cliente        ON layout_logos(cliente_id);
CREATE INDEX IF NOT EXISTS idx_layouts_camisetas_tenant    ON layouts_camisetas(tenant_id);
CREATE INDEX IF NOT EXISTS idx_layouts_camisetas_cliente   ON layouts_camisetas(cliente_id);
CREATE INDEX IF NOT EXISTS idx_layouts_camisetas_pedido    ON layouts_camisetas(pedido_id);

-- ── Permissões RLS (Row Level Security — seguindo padrão do sistema) ──────────
ALTER TABLE layout_categorias    ENABLE ROW LEVEL SECURITY;
ALTER TABLE layout_templates     ENABLE ROW LEVEL SECURITY;
ALTER TABLE layout_logos         ENABLE ROW LEVEL SECURITY;
ALTER TABLE layouts_camisetas    ENABLE ROW LEVEL SECURITY;

-- +goose StatementEnd

-- +goose Down
-- +goose StatementBegin
DROP TABLE IF EXISTS layouts_camisetas CASCADE;
DROP TABLE IF EXISTS layout_logos CASCADE;
DROP TABLE IF EXISTS layout_templates CASCADE;
DROP TABLE IF EXISTS layout_categorias CASCADE;
-- +goose StatementEnd

-- As policies são aplicadas pelo tenant_id injetado via JWT (padrão do sistema)
-- O middleware de tenant já filtra via SET app.current_tenant_id

-- ── Dados iniciais (categorias padrão) ───────────────────────────────────────
-- (serão inseridos pelo tenant ao criar sua conta ou manualmente)
-- Não inserimos aqui pois é multi-tenant: cada tenant tem suas próprias categorias.
