SET lock_timeout = '10s';
SET statement_timeout = '120000';

CREATE TABLE IF NOT EXISTS commerce.planes_pago_hitos_globales (
    id_hito integer GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    business_id varchar(100) NOT NULL,
    sucursal integer NOT NULL,
    nombre varchar(120) NOT NULL,
    descripcion text NULL,
    porcentaje integer NOT NULL,
    color varchar(20) NOT NULL DEFAULT '#22c55e',
    es_elegibilidad boolean NOT NULL DEFAULT false,
    label_elegible varchar(255) NULL,
    label_no_elegible varchar(255) NULL,
    activo boolean NOT NULL DEFAULT true,
    orden integer NOT NULL DEFAULT 0,
    created_at timestamptz NOT NULL DEFAULT now(),
    created_by_login_id integer NULL,
    updated_at timestamptz NOT NULL DEFAULT now(),
    updated_by_login_id integer NULL,
    soft_delete boolean NOT NULL DEFAULT false,
    soft_delete_date timestamptz NULL,
    CONSTRAINT planes_pago_hitos_globales_porcentaje_chk CHECK (porcentaje >= 0 AND porcentaje <= 100)
);

CREATE INDEX IF NOT EXISTS planes_pago_hitos_globales_business_sucursal_idx
    ON commerce.planes_pago_hitos_globales USING btree (business_id, sucursal)
    WHERE soft_delete IS NOT TRUE;

CREATE INDEX IF NOT EXISTS planes_pago_hitos_globales_activo_idx
    ON commerce.planes_pago_hitos_globales USING btree (activo)
    WHERE soft_delete IS NOT TRUE;

CREATE UNIQUE INDEX IF NOT EXISTS planes_pago_hitos_globales_nombre_unq_idx
    ON commerce.planes_pago_hitos_globales USING btree (business_id, sucursal, lower(nombre))
    WHERE soft_delete IS NOT TRUE;

COMMENT ON TABLE commerce.planes_pago_hitos_globales IS 'Catalogo global de hitos reutilizables para planes de pago por negocio y sucursal.';

COMMENT ON COLUMN commerce.planes_pago_hitos_globales.id_hito IS 'Identificador unico del hito global.';
COMMENT ON COLUMN commerce.planes_pago_hitos_globales.business_id IS 'Tenant del negocio propietario del hito global.';
COMMENT ON COLUMN commerce.planes_pago_hitos_globales.sucursal IS 'Sucursal donde el hito global esta disponible.';
COMMENT ON COLUMN commerce.planes_pago_hitos_globales.nombre IS 'Nombre visible del hito global (unico por negocio+sucursal activo).';
COMMENT ON COLUMN commerce.planes_pago_hitos_globales.descripcion IS 'Descripcion opcional para mostrar contexto del hito global.';
COMMENT ON COLUMN commerce.planes_pago_hitos_globales.porcentaje IS 'Porcentaje objetivo (0-100) que representa el hito en el avance del plan.';
COMMENT ON COLUMN commerce.planes_pago_hitos_globales.color IS 'Color hexadecimal usado para renderizar el marcador del hito.';
COMMENT ON COLUMN commerce.planes_pago_hitos_globales.es_elegibilidad IS 'Marca si el hito puede definir el umbral de elegibilidad para entregables.';
COMMENT ON COLUMN commerce.planes_pago_hitos_globales.label_elegible IS 'Template opcional para label de estado elegible.';
COMMENT ON COLUMN commerce.planes_pago_hitos_globales.label_no_elegible IS 'Template opcional para label de estado no elegible.';
COMMENT ON COLUMN commerce.planes_pago_hitos_globales.activo IS 'Control logico para ocultar/activar hitos sin perder historial.';
COMMENT ON COLUMN commerce.planes_pago_hitos_globales.orden IS 'Orden preferido de visualizacion en listados de hitos globales.';
COMMENT ON COLUMN commerce.planes_pago_hitos_globales.soft_delete IS 'Borrado logico del hito global.';
COMMENT ON COLUMN commerce.planes_pago_hitos_globales.soft_delete_date IS 'Fecha de borrado logico del hito global.';
