
CREATE SCHEMA IF NOT EXISTS testing;
CREATE SCHEMA IF NOT EXISTS platform;

CREATE TABLE IF NOT EXISTS testing.backend_agent_test (
    LIKE public.backend_agent_test INCLUDING ALL
);

TRUNCATE TABLE testing.backend_agent_test;

INSERT INTO testing.backend_agent_test (
    id_test,
    business_id,
    nombre,
    descripcion,
    valor_numerico,
    activo,
    metadata,
    fecha_creacion,
    soft_delete,
    soft_delete_date
)
SELECT
    id_test,
    business_id,
    nombre,
    descripcion,
    valor_numerico,
    activo,
    metadata,
    fecha_creacion,
    soft_delete,
    soft_delete_date
FROM public.backend_agent_test;

CREATE SEQUENCE IF NOT EXISTS testing.backend_agent_test_id_test_seq
    AS integer
    OWNED BY testing.backend_agent_test.id_test;

ALTER TABLE testing.backend_agent_test
    ALTER COLUMN id_test SET DEFAULT nextval('testing.backend_agent_test_id_test_seq'::regclass);

SELECT setval(
    'testing.backend_agent_test_id_test_seq',
    COALESCE((SELECT MAX(id_test) FROM testing.backend_agent_test), 1),
    COALESCE((SELECT MAX(id_test) FROM testing.backend_agent_test), 0) > 0
);

CREATE TABLE IF NOT EXISTS platform.configuraciones (
    LIKE public.configuraciones INCLUDING ALL
);

TRUNCATE TABLE platform.configuraciones;

INSERT INTO platform.configuraciones (
    role_id,
    business_id,
    soft_delete,
    soft_delete_date,
    tipo,
    razon_social,
    rfc,
    direccion,
    garantia,
    name,
    horario,
    pago_predeterminado,
    porcentaje_tarjeta,
    sucursal,
    autorizaciones_administrador,
    autorizaciones_gerente,
    autorizaciones_empleado,
    apodo_clientes,
    apodo_cliente,
    apodo_cliente_lead,
    apodo_cliente_prospecto,
    apodo_cliente_cliente,
    apodo_empleado,
    apodo_gerente,
    apodo_administrador,
    apodo_empleados,
    apodo_gerentes,
    apodo_administradores,
    planes_pago_config
)
SELECT
    role_id,
    business_id,
    soft_delete,
    soft_delete_date,
    tipo,
    razon_social,
    rfc,
    direccion,
    garantia,
    name,
    horario,
    pago_predeterminado,
    porcentaje_tarjeta,
    sucursal,
    autorizaciones_administrador,
    autorizaciones_gerente,
    autorizaciones_empleado,
    apodo_clientes,
    apodo_cliente,
    apodo_cliente_lead,
    apodo_cliente_prospecto,
    apodo_cliente_cliente,
    apodo_empleado,
    apodo_gerente,
    apodo_administrador,
    apodo_empleados,
    apodo_gerentes,
    apodo_administradores,
    planes_pago_config
FROM public.configuraciones;

CREATE TABLE IF NOT EXISTS platform.estadisticas (
    LIKE public.estadisticas INCLUDING ALL
);

TRUNCATE TABLE platform.estadisticas;

INSERT INTO platform.estadisticas (
    id_estadistica,
    business_id,
    sucursal,
    soft_delete,
    soft_delete_date,
    mensajes_total,
    rfc3339_mensajes,
    inicio_conversacion_hora,
    fin_conversacion_hora,
    timeout_si_o_no,
    id_cliente,
    analisis_id
)
SELECT
    id_estadistica,
    business_id,
    sucursal,
    soft_delete,
    soft_delete_date,
    mensajes_total,
    rfc3339_mensajes,
    inicio_conversacion_hora,
    fin_conversacion_hora,
    timeout_si_o_no,
    id_cliente,
    analisis_id
FROM public.estadisticas;

CREATE SEQUENCE IF NOT EXISTS platform.estadisticas_id_estadistica_seq
    AS bigint
    OWNED BY platform.estadisticas.id_estadistica;

ALTER TABLE platform.estadisticas
    ALTER COLUMN id_estadistica SET DEFAULT nextval('platform.estadisticas_id_estadistica_seq'::regclass);

SELECT setval(
    'platform.estadisticas_id_estadistica_seq',
    COALESCE((SELECT MAX(id_estadistica) FROM platform.estadisticas), 1),
    COALESCE((SELECT MAX(id_estadistica) FROM platform.estadisticas), 0) > 0
);

CREATE TABLE IF NOT EXISTS platform.notas_internas (
    LIKE public.notas_internas INCLUDING ALL
);

TRUNCATE TABLE platform.notas_internas;

INSERT INTO platform.notas_internas (
    id_nota,
    id_cliente,
    business_id,
    contenido,
    visibilidad,
    sucursal,
    created_at,
    created_by_login_id,
    created_by_user_id,
    soft_delete,
    soft_delete_date,
    extra,
    estatus,
    rfc3339_fecha_limite,
    rfc3339_resuelto_en,
    updated_at,
    updated_by_login_id,
    limite_time_period,
    limite_fecha_procesada,
    id_plan_pago,
    entidad,
    id_venta,
    id_estadistica
)
SELECT
    id_nota,
    id_cliente,
    business_id,
    contenido,
    visibilidad,
    sucursal,
    created_at,
    created_by_login_id,
    created_by_user_id,
    soft_delete,
    soft_delete_date,
    extra,
    estatus,
    rfc3339_fecha_limite,
    rfc3339_resuelto_en,
    updated_at,
    updated_by_login_id,
    limite_time_period,
    limite_fecha_procesada,
    id_plan_pago,
    entidad,
    id_venta,
    id_estadistica
FROM public.notas_internas;

CREATE SEQUENCE IF NOT EXISTS platform.notas_cliente_id_nota_seq
    AS bigint
    OWNED BY platform.notas_internas.id_nota;

ALTER TABLE platform.notas_internas
    ALTER COLUMN id_nota SET DEFAULT nextval('platform.notas_cliente_id_nota_seq'::regclass);

SELECT setval(
    'platform.notas_cliente_id_nota_seq',
    COALESCE((SELECT MAX(id_nota) FROM platform.notas_internas), 1),
    COALESCE((SELECT MAX(id_nota) FROM platform.notas_internas), 0) > 0
);

CREATE TABLE IF NOT EXISTS platform.opi_prompts (
    LIKE public.opi_prompts INCLUDING ALL
);

TRUNCATE TABLE platform.opi_prompts;

INSERT INTO platform.opi_prompts (
    id,
    prompt_key,
    content,
    category,
    description,
    url_pattern,
    include_knowledge,
    is_active,
    created_at,
    updated_at
)
SELECT
    id,
    prompt_key,
    content,
    category,
    description,
    url_pattern,
    include_knowledge,
    is_active,
    created_at,
    updated_at
FROM public.opi_prompts;

CREATE SEQUENCE IF NOT EXISTS platform.opi_prompts_id_seq
    AS integer
    OWNED BY platform.opi_prompts.id;

ALTER TABLE platform.opi_prompts
    ALTER COLUMN id SET DEFAULT nextval('platform.opi_prompts_id_seq'::regclass);

SELECT setval(
    'platform.opi_prompts_id_seq',
    COALESCE((SELECT MAX(id) FROM platform.opi_prompts), 1),
    COALESCE((SELECT MAX(id) FROM platform.opi_prompts), 0) > 0
);

ANALYZE testing.backend_agent_test;
ANALYZE platform.configuraciones;
ANALYZE platform.estadisticas;
ANALYZE platform.notas_internas;
ANALYZE platform.opi_prompts;
