-- =============================================================================
-- Revierte manualmente una creación tipo createPublicPobox (PoboxService).
--
-- Orden lógico del alta en código:
--   1) customer + baddress (adrdefault / adrmain)
--   2) user (type POBOX) + users_roles
--   3) pobox (customer_id, user_id, createby_id = mismo user)
--   4) maincompany.countcustomers +1
--
-- Antes de ejecutar: revisa nombres de columnas con:
--   SHOW CREATE TABLE `pobox`;
--   SHOW CREATE TABLE `customer`;
--   SHOW CREATE TABLE `user`;
--
-- Si tu esquema no tiene user.pobox_id, omite esa sentencia UPDATE.
-- =============================================================================
START TRANSACTION;
-- ---------------------------------------------------------------------------
-- 1) Identifica el pobox (elige UNA forma)
-- ---------------------------------------------------------------------------
-- Opción A: por id de pobox
SET @pobox_id = 0;
-- <-- EDITAR
-- Opción B: por número de casillero + empresa (descomenta y ajusta)
-- SET @pobox_number = 'NUMERO_CASILLERO';
-- SET @maincompany_id_lookup = 1;
-- SET @pobox_id = (
--     SELECT id FROM `pobox`
--     WHERE `number` = @pobox_number AND maincompany_id = @maincompany_id_lookup
--     LIMIT 1
-- );
-- ---------------------------------------------------------------------------
-- 2) Resolver IDs (aborta si no hay fila)
-- ---------------------------------------------------------------------------
SET @customer_id = (
        SELECT customer_id
        FROM `pobox`
        WHERE id = @pobox_id
        LIMIT 1
    );
SET @user_id = (
        SELECT user_id
        FROM `pobox`
        WHERE id = @pobox_id
        LIMIT 1
    );
SET @maincompany_id = (
        SELECT maincompany_id
        FROM `pobox`
        WHERE id = @pobox_id
        LIMIT 1
    );
-- Comprueba que existen referencias coherentes
SELECT @pobox_id AS pobox_id,
    @customer_id AS customer_id,
    @user_id AS user_id,
    @maincompany_id AS maincompany_id;
-- Si alguno es NULL: ROLLBACK; y corrige @pobox_id o la consulta de búsqueda.
-- ---------------------------------------------------------------------------
-- 3) Comprobar que no hay datos de negocio colgando (ajusta según tu BD)
-- ---------------------------------------------------------------------------
-- SELECT COUNT(*) AS alerts FROM alert WHERE pobox_id = @pobox_id;
-- SELECT COUNT(*) AS reempacks FROM reempack WHERE pobox_id = @pobox_id;
-- Si algún COUNT > 0, no borres con este script o amplía el rollback.
-- ---------------------------------------------------------------------------
-- 4) Usuario POBOX: roles, refresh tokens, puntero inverso opcional
-- ---------------------------------------------------------------------------
DELETE FROM `users_roles`
WHERE user_id = @user_id;
DELETE FROM `refresh_tokens`
WHERE username = (
        SELECT username
        FROM `user`
        WHERE id = @user_id
        LIMIT 1
    );
-- Solo si existe la columna user.pobox_id (si falla, comenta esta línea):
UPDATE `user`
SET pobox_id = NULL
WHERE id = @user_id;
-- ---------------------------------------------------------------------------
-- 5) Customer: quitar punteros (el cliente referencia baddress; baddress también
--    tiene customer_id → hay que romper el ciclo y borrar direcciones ANTES del customer)
-- ---------------------------------------------------------------------------
UPDATE `customer`
SET pobox_id = NULL,
    adrdefault_id = NULL,
    adrmain_id = NULL
WHERE id = @customer_id;
-- ---------------------------------------------------------------------------
-- 6) Pobox y user (ya no deben bloquear baddress/customer)
-- ---------------------------------------------------------------------------
DELETE FROM `pobox`
WHERE id = @pobox_id;
DELETE FROM `user`
WHERE id = @user_id;
-- ---------------------------------------------------------------------------
-- 7) Todas las direcciones del cliente (no solo adrdefault/adrmain: cualquier
--    fila en baddress con este customer_id debe irse antes del DELETE customer)
-- ---------------------------------------------------------------------------
DELETE FROM `baddress`
WHERE customer_id = @customer_id;
-- Si falla por FK entre baddress (master/slave), borra primero las hijas:
-- DELETE FROM `baddress` WHERE customer_id = @customer_id AND master_id IS NOT NULL;
-- DELETE FROM `baddress` WHERE customer_id = @customer_id;
DELETE FROM `customer`
WHERE id = @customer_id;
-- ---------------------------------------------------------------------------
-- 8) Revertir contador de clientes de la empresa (createPobox lo incrementó)
-- ---------------------------------------------------------------------------
UPDATE `maincompany`
SET countcustomers = GREATEST(0, CAST(countcustomers AS SIGNED) - 1)
WHERE id = @maincompany_id;
-- ---------------------------------------------------------------------------
-- 9) Correlativo document_sequence (SOLO si la empresa NO usa legacy y el
--    número del pobox salió de document_sequence). Revisa a mano:
--    SELECT * FROM document_sequence
--    WHERE maincompany_id = @maincompany_id AND document_type = 'POBOX';
-- Si last_number se avanzó con este alta, puedes necesitar decrementarlo;
-- hazlo solo si estás seguro de que no hay huecos usados por otros registros.
-- ---------------------------------------------------------------------------
-- COMMIT;
ROLLBACK;
-- <-- Cambia a COMMIT; cuando hayas revisado los SELECT previos.
