-- ============================================================================
-- 04_migrate_from_clientesmig.sql
-- Migra Empresas + LicenciasEmpresas desde CLIENTESMIG (SQL Server viejo)
-- a LicenciasMIG (SQL Server nuevo del VPS)
--
-- Forma de uso: este script se ejecuta DESDE el VPS contra LicenciasMIG,
-- usando un servidor enlazado (linked server) llamado [SRV_VIEJO] que apunta
-- al SQL Express donde vive CLIENTESMIG. El script de bootstrap del deploy
-- crea ese linked server automaticamente.
--
-- Si no quieres usar linked server, ejecuta scripts/migrate_via_python.py que
-- hace la misma migracion via pyodbc desde el VPS al WindowsAGRESSOR.
-- ============================================================================

USE LicenciasMIG;
GO

-- ----------------------------------------------------------------------------
-- Empresas
-- ----------------------------------------------------------------------------
PRINT 'Migrando Empresas...';
SET IDENTITY_INSERT dbo.Empresas OFF;

;WITH OrigenEmpresas AS (
    SELECT
        nit, razonsocial, nombrecomercial, direccion, telefono, celular,
        ISNULL(mensualidad, 0) AS mensualidad,
        ISNULL(regulariza, 0)  AS regulariza,
        tipotpv,
        ISNULL(fecharegistro, GETDATE())      AS fecharegistro,
        ISNULL(fechaactualizacion, GETDATE()) AS fechaactualizacion,
        CONVERT(NVARCHAR(MAX), claveproducto)  AS claveproducto,
        CONVERT(NVARCHAR(MAX), nombreequipo)   AS nombreequipo,
        CONVERT(NVARCHAR(MAX), osversion)      AS osversion,
        ROW_NUMBER() OVER (PARTITION BY nit ORDER BY fecharegistro DESC) AS rn
    FROM [SRV_VIEJO].CLIENTESMIG.dbo.Empresas
    WHERE nit IS NOT NULL AND LTRIM(RTRIM(nit)) <> ''
)
INSERT INTO dbo.Empresas (
    nit, razonsocial, nombrecomercial, direccion, telefono, celular,
    mensualidad, regulariza, tipotpv,
    fecharegistro, fechaactualizacion,
    claveproducto, nombreequipo, osversion
)
SELECT
    nit, razonsocial, nombrecomercial, direccion, telefono, celular,
    mensualidad, regulariza, tipotpv,
    fecharegistro, fechaactualizacion,
    claveproducto, nombreequipo, osversion
FROM OrigenEmpresas
WHERE rn = 1
  AND nit NOT IN (SELECT nit FROM dbo.Empresas);

PRINT CONCAT('Empresas migradas: ', @@ROWCOUNT);

-- ----------------------------------------------------------------------------
-- LicenciasEmpresas (todas las filas, una por licencia emitida)
-- ----------------------------------------------------------------------------
PRINT 'Migrando LicenciasEmpresas...';

INSERT INTO dbo.LicenciasEmpresas (
    nit, razonsocial, nombrecomercial, direccion, telefono, celular,
    iddepartamento, idciudad, licenciatemporal, fecharegistro,
    responsable, correoresponsable, telefonoponsable, motivolicencia,
    claveproducto, nombreequipo, osversion, clavemes,
    licenciaactiva, bloquearlicencia
)
SELECT
    L.nit, L.razonsocial, L.nombrecomercial, L.direccion, L.telefono, L.celular,
    L.iddepartamento, L.idciudad,
    ISNULL(L.licenciatemporal, 0),
    ISNULL(L.fecharegistro, GETDATE()),
    L.responsable, L.correoresponsable, L.telefonoponsable, L.motivolicencia,
    CONVERT(NVARCHAR(MAX), L.claveproducto),
    CONVERT(NVARCHAR(MAX), L.nombreequipo),
    CONVERT(NVARCHAR(MAX), L.osversion),
    L.clavemes,
    ISNULL(L.licenciaactiva, 1),
    ISNULL(L.bloquearlicencia, 0)
FROM [SRV_VIEJO].CLIENTESMIG.dbo.LicenciasEmpresas L
WHERE L.nit IS NOT NULL AND LTRIM(RTRIM(L.nit)) <> ''
  AND EXISTS (SELECT 1 FROM dbo.Empresas E WHERE E.nit = L.nit);

PRINT CONCAT('Licencias migradas: ', @@ROWCOUNT);

-- ----------------------------------------------------------------------------
-- Resumen
-- ----------------------------------------------------------------------------
SELECT 'Empresas' AS Tabla, COUNT(*) AS Total FROM dbo.Empresas
UNION ALL
SELECT 'LicenciasEmpresas', COUNT(*) FROM dbo.LicenciasEmpresas;
GO
