-- +goose Up
-- +goose StatementBegin
DECLARE
    v_count NUMBER;
BEGIN
    SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_FATO_VENDA';
    IF v_count = 0 THEN
        EXECUTE IMMEDIATE '
            CREATE TABLE TB_FLASH_FATO_VENDA (
                ID_FATO            NUMBER        NOT NULL,
                DATA_REFERENCIA    DATE          NOT NULL,
                ANO_REFERENCIA     NUMBER(4,0)   NOT NULL,
                MES_REFERENCIA     NUMBER(2,0)   NOT NULL,
                DIA_REFERENCIA     NUMBER(2,0),
                DIA_SEMANA         NUMBER(2,0),
                ID_NODO            NUMBER        NOT NULL,
                ID_NODO_EMPRESA    NUMBER        NOT NULL,
                COD_EMPRESA        NUMBER        NOT NULL,
                NOME_EMPRESA       VARCHAR2(200),
                COD_PRODUTO        NUMBER        NOT NULL,
                DESCRICAO_PRODUTO  VARCHAR2(300),
                SEQPRODUTOBASE     NUMBER,
                NRODIVISAO         NUMBER,
                NROSEGMENTO        NUMBER,
                NRO_TICKETS        NUMBER(18,6),
                VLR_IMP_VENDA      NUMBER(18,6),
                QTDE_VENDA         NUMBER(18,6),
                VLR_VENDA          NUMBER(18,6),
                VL_TICKET_MEDIO    NUMBER(18,6),
                PROPQTDPRODUTOBASE NUMBER(18,6),
                DATA_CADASTRO      DATE DEFAULT SYSDATE NOT NULL,
                NOME_SEGMENTO      VARCHAR2(300),
                CONSTRAINT CK_TB_FLASH_FATO_VENDA_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12),
                CONSTRAINT PK_TB_FLASH_FATO_VENDA PRIMARY KEY (ID_FATO),
                CONSTRAINT UK_TB_FLASH_FATO_VENDA UNIQUE (DATA_REFERENCIA, COD_EMPRESA, COD_PRODUTO, NROSEGMENTO)
            )';
    END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
    v_count NUMBER;
BEGIN
    SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_FATO_VENDA_NODO';
    IF v_count = 0 THEN
        EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_FATO_VENDA ADD CONSTRAINT FK_TB_FLASH_FATO_VENDA_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO)';
    END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
    v_count NUMBER;
BEGIN
    SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_FATO_VENDA_EMP';
    IF v_count = 0 THEN
        EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_FATO_VENDA ADD CONSTRAINT FK_TB_FLASH_FATO_VENDA_EMP FOREIGN KEY (ID_NODO_EMPRESA) REFERENCES TB_FLASH_NODO (ID_NODO)';
    END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
    v_count NUMBER;
BEGIN
    SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_VENDA_DATA';
    IF v_count = 0 THEN
        EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_VENDA_DATA ON TB_FLASH_FATO_VENDA (DATA_REFERENCIA)';
    END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
    v_count NUMBER;
BEGIN
    SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_VENDA_ANOMES';
    IF v_count = 0 THEN
        EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_VENDA_ANOMES ON TB_FLASH_FATO_VENDA (ANO_REFERENCIA, MES_REFERENCIA)';
    END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
    v_count NUMBER;
BEGIN
    SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_VENDA_NODO';
    IF v_count = 0 THEN
        EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_VENDA_NODO ON TB_FLASH_FATO_VENDA (ID_NODO)';
    END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
    v_count NUMBER;
BEGIN
    SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_VENDA_EMP';
    IF v_count = 0 THEN
        EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_VENDA_EMP ON TB_FLASH_FATO_VENDA (COD_EMPRESA, ANO_REFERENCIA, MES_REFERENCIA)';
    END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
    v_count NUMBER;
BEGIN
    SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_VENDA_PROD';
    IF v_count = 0 THEN
        EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_VENDA_PROD ON TB_FLASH_FATO_VENDA (COD_PRODUTO)';
    END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
    v_count NUMBER;
BEGIN
    SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'TB_FLASH_FATO_VENDA_DATA_REFERENCIA_IDX';
    IF v_count = 0 THEN
        EXECUTE IMMEDIATE 'CREATE INDEX TB_FLASH_FATO_VENDA_DATA_REFERENCIA_IDX ON TB_FLASH_FATO_VENDA (DATA_REFERENCIA, COD_EMPRESA)';
    END IF;
END;
-- +goose StatementEnd

-- +goose Down
-- +goose StatementBegin
DECLARE
    v_count NUMBER;
BEGIN
    SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_FATO_VENDA';
    IF v_count > 0 THEN
        EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_FATO_VENDA CASCADE CONSTRAINTS PURGE';
    END IF;
END;
-- +goose StatementEnd
