-- +goose Up
-- +goose StatementBegin

-- ─────────────────────────────────────────────────────────────────────────────
-- Periculosidade na jornada (adicional é definido pela jornada do funcionário)
-- ─────────────────────────────────────────────────────────────────────────────
ALTER TABLE jornadas
    ADD COLUMN IF NOT EXISTS periculosidade      BOOLEAN      NOT NULL DEFAULT false,
    ADD COLUMN IF NOT EXISTS perc_periculosidade NUMERIC(5,2) NOT NULL DEFAULT 30,
    ADD COLUMN IF NOT EXISTS insalubridade       BOOLEAN      NOT NULL DEFAULT false,
    ADD COLUMN IF NOT EXISTS perc_insalubridade  NUMERIC(5,2) NOT NULL DEFAULT 0;

-- ─────────────────────────────────────────────────────────────────────────────
-- Lançamentos avulsos de holerite (comissão, produtividade, eficiência, etc.)
-- Lançados manualmente pelo RH antes do cálculo/fechamento da folha do mês.
-- ─────────────────────────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS holerite_lancamentos (
    id              UUID         PRIMARY KEY DEFAULT uuid_generate_v4(),
    tenant_id       UUID         NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
    funcionario_id  UUID         NOT NULL REFERENCES users(id)   ON DELETE CASCADE,
    mes             TEXT         NOT NULL, -- formato 'YYYY-MM'
    tipo            TEXT         NOT NULL
                                 CHECK (tipo IN ('comissao','produtividade','eficiencia','bonus','outros_proventos','outros_descontos')),
    descricao       TEXT         NOT NULL DEFAULT '',
    valor           NUMERIC(12,2) NOT NULL DEFAULT 0,
    criado_por      UUID         REFERENCES users(id) ON DELETE SET NULL,
    criado_em       TIMESTAMPTZ  NOT NULL DEFAULT now()
);

CREATE INDEX IF NOT EXISTS idx_hol_lanc_tenant_func_mes
    ON holerite_lancamentos (tenant_id, funcionario_id, mes);

-- ─────────────────────────────────────────────────────────────────────────────
-- Histórico de holerites fechados/pagos (snapshot do cálculo no momento do
-- fechamento — preserva o valor pago mesmo se a jornada/salário mudar depois)
-- ─────────────────────────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS holerites (
    id                  UUID         PRIMARY KEY DEFAULT uuid_generate_v4(),
    tenant_id           UUID         NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
    funcionario_id      UUID         NOT NULL REFERENCES users(id)   ON DELETE CASCADE,
    mes                 TEXT         NOT NULL, -- 'YYYY-MM'
    salario_base        NUMERIC(12,2) NOT NULL DEFAULT 0,
    total_proventos      NUMERIC(12,2) NOT NULL DEFAULT 0,
    total_descontos      NUMERIC(12,2) NOT NULL DEFAULT 0,
    total_liquido        NUMERIC(12,2) NOT NULL DEFAULT 0,
    base_fgts            NUMERIC(12,2) NOT NULL DEFAULT 0,
    fgts_a_depositar      NUMERIC(12,2) NOT NULL DEFAULT 0,
    snapshot_json        JSONB        NOT NULL DEFAULT '{}', -- holerite completo calculado
    status               TEXT         NOT NULL DEFAULT 'fechado'
                                      CHECK (status IN ('fechado','pago','cancelado')),
    pago_em              TIMESTAMPTZ,
    criado_por           UUID         REFERENCES users(id) ON DELETE SET NULL,
    criado_em            TIMESTAMPTZ  NOT NULL DEFAULT now(),
    UNIQUE (tenant_id, funcionario_id, mes)
);

CREATE INDEX IF NOT EXISTS idx_holerites_tenant_func
    ON holerites (tenant_id, funcionario_id, mes);

-- +goose StatementEnd

-- +goose Down
-- +goose StatementBegin
DROP TABLE IF EXISTS holerites;
DROP TABLE IF EXISTS holerite_lancamentos;
ALTER TABLE jornadas
    DROP COLUMN IF EXISTS periculosidade,
    DROP COLUMN IF EXISTS perc_periculosidade,
    DROP COLUMN IF EXISTS insalubridade,
    DROP COLUMN IF EXISTS perc_insalubridade;
-- +goose StatementEnd
