-- Migration para o Módulo de Lacres

BEGIN;

DROP TABLE IF EXISTS lacres_auditoria CASCADE;
DROP TABLE IF EXISTS lacres_configuracao CASCADE;
DROP TABLE IF EXISTS lacres CASCADE;

-- =====================================================
-- TABELA: lacres
-- =====================================================
CREATE TABLE lacres (
    id SERIAL PRIMARY KEY,
    numero_lacre VARCHAR(100) NOT NULL,
    status VARCHAR(30) DEFAULT 'disponivel',
    observacao TEXT,

    -- Block padrão
    data_cadastro TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    block_filial_id INTEGER,
    block_usuario_id INTEGER,
    usuario_cadastro VARCHAR(255),
    data_atualizacao TIMESTAMP WITHOUT TIME ZONE,
    usuario_atualizacao VARCHAR(255),
    block_data TIMESTAMP WITHOUT TIME ZONE,
    block_quem VARCHAR(255),
    block INTEGER,
    block_empresa_id INTEGER,
    
    -- Campos específicos do negócio
    editado BOOLEAN DEFAULT FALSE,
    data_criacao TIMESTAMP WITHOUT TIME ZONE,
    data_edicao TIMESTAMP WITHOUT TIME ZONE
);

-- Removido UNIQUE INDEX a pedido do usuário para validação interna
CREATE INDEX IF NOT EXISTS idx_lacre_numero_empresa ON lacres (numero_lacre, block_empresa_id);
CREATE INDEX IF NOT EXISTS idx_lacre_status ON lacres (status);
CREATE INDEX IF NOT EXISTS idx_lacre_filial ON lacres (block_filial_id);

-- =====================================================
-- TABELA: lacres_auditoria
-- =====================================================
CREATE TABLE lacres_auditoria (
    id SERIAL PRIMARY KEY,
    lacre_id INT NOT NULL REFERENCES lacres(id) ON DELETE CASCADE,
    acao VARCHAR(50) NOT NULL,
    status_anterior VARCHAR(30),
    status_novo VARCHAR(30),
    dados_alterados JSONB,
    usuario_id INT,
    usuario_nome VARCHAR(255),

    -- Block padrão
    data_cadastro TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    block_filial_id INTEGER,
    block_usuario_id INTEGER,
    usuario_cadastro VARCHAR(255),
    data_atualizacao TIMESTAMP WITHOUT TIME ZONE,
    usuario_atualizacao VARCHAR(255),
    block_data TIMESTAMP WITHOUT TIME ZONE,
    block_quem VARCHAR(255),
    block INTEGER,
    block_empresa_id INTEGER
);

CREATE INDEX IF NOT EXISTS idx_auditoria_lacre_id ON lacres_auditoria (lacre_id);
CREATE INDEX IF NOT EXISTS idx_auditoria_filial ON lacres_auditoria (block_filial_id);

-- =====================================================
-- TABELA: lacres_configuracao
-- =====================================================
CREATE TABLE lacres_configuracao (
    id SERIAL PRIMARY KEY,
    quantidade_minima INT NOT NULL DEFAULT 1 CHECK (quantidade_minima > 0),
    quantidade_maxima INT NOT NULL DEFAULT 10 CHECK (quantidade_maxima > 0),
    ativa BOOLEAN DEFAULT true,

    -- Block padrão
    data_cadastro TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    block_filial_id INTEGER,
    block_usuario_id INTEGER,
    usuario_cadastro VARCHAR(255),
    data_atualizacao TIMESTAMP WITHOUT TIME ZONE,
    usuario_atualizacao VARCHAR(255),
    block_data TIMESTAMP WITHOUT TIME ZONE,
    block_quem VARCHAR(255),
    block INTEGER,
    block_empresa_id INTEGER
);

ALTER TABLE lacres_configuracao
    ADD CONSTRAINT chk_minimo_menor_maximo CHECK (quantidade_minima <= quantidade_maxima);

CREATE INDEX IF NOT EXISTS idx_configuracao_filial ON lacres_configuracao (block_filial_id);

COMMIT;
