-- V013_ROLLBACK.sql
-- Reversa de V013__create_puntos_de_venta.sql.
--
-- ADVERTENCIA: ejecutar ELIMINA PuntoDeVenta, su historia temporal,
--   el permiso 'administracion:puntos_de_venta:gestionar' y sus asignaciones.
--
-- Uso intended: ROLLBACK en entornos NO-productivos.
-- Prerequisito: no deben existir FKs vivas apuntando a PuntoDeVenta (p.ej., comprobantes FAC-001).
--   Si FAC-001 ya está aplicado, este rollback fallará — usar backup.
--
-- NOTA: SecuenciaComprobante y SP usp_ReservarNumeroComprobante ya no forman parte
--   de V013 (eliminados en cirugía post-smoke Batch 9). Este rollback solo maneja PuntoDeVenta.

SET QUOTED_IDENTIFIER ON;
SET ANSI_NULLS ON;
SET NOCOUNT ON;
GO

-- ═══════════════════════════════════════════════════════════════════════
-- 1. Apagar SYSTEM_VERSIONING + remover PERIOD — PuntoDeVenta
-- ═══════════════════════════════════════════════════════════════════════

IF EXISTS (SELECT 1 FROM sys.tables WHERE object_id = OBJECT_ID('dbo.PuntoDeVenta') AND temporal_type = 2)
BEGIN
    ALTER TABLE dbo.PuntoDeVenta SET (SYSTEM_VERSIONING = OFF);
    PRINT 'PuntoDeVenta: SYSTEM_VERSIONING OFF.';
END
GO

IF EXISTS (SELECT 1 FROM sys.periods WHERE object_id = OBJECT_ID('dbo.PuntoDeVenta'))
BEGIN
    ALTER TABLE dbo.PuntoDeVenta DROP PERIOD FOR SYSTEM_TIME;
    PRINT 'PuntoDeVenta: PERIOD FOR SYSTEM_TIME dropped.';
END
GO

IF COL_LENGTH('dbo.PuntoDeVenta', 'ValidFrom') IS NOT NULL
BEGIN
    ALTER TABLE dbo.PuntoDeVenta DROP CONSTRAINT IF EXISTS DF_PuntoDeVenta_ValidFrom;
    ALTER TABLE dbo.PuntoDeVenta DROP CONSTRAINT IF EXISTS DF_PuntoDeVenta_ValidTo;
    ALTER TABLE dbo.PuntoDeVenta DROP COLUMN ValidFrom, ValidTo;
    PRINT 'PuntoDeVenta: ValidFrom/ValidTo dropped.';
END
GO

IF OBJECT_ID(N'dbo.PuntoDeVenta_History', N'U') IS NOT NULL
BEGIN
    DROP TABLE dbo.PuntoDeVenta_History;
    PRINT 'PuntoDeVenta_History dropped.';
END
GO

-- ═══════════════════════════════════════════════════════════════════════
-- 2. Drop tabla PuntoDeVenta
-- ═══════════════════════════════════════════════════════════════════════

IF OBJECT_ID(N'dbo.PuntoDeVenta', N'U') IS NOT NULL
BEGIN
    DROP TABLE dbo.PuntoDeVenta;
    PRINT 'Table dbo.PuntoDeVenta dropped.';
END
GO

-- ═══════════════════════════════════════════════════════════════════════
-- 3. Remover permiso 'administracion:puntos_de_venta:gestionar' + RolPermiso
-- ═══════════════════════════════════════════════════════════════════════

DELETE rp
FROM dbo.RolPermiso rp
JOIN dbo.Permiso p ON p.Id = rp.PermisoId
WHERE p.Codigo = 'administracion:puntos_de_venta:gestionar';
GO

DELETE FROM dbo.Permiso
WHERE Codigo = 'administracion:puntos_de_venta:gestionar';
GO

PRINT '';
PRINT 'V013 rolled back. dbo.PuntoDeVenta and its history removed.';
PRINT 'Permiso administracion:puntos_de_venta:gestionar removed.';
GO
