import { MigrationInterface, QueryRunner } from "typeorm";

// ELIMINA, no reconcilia: taller_sync_events nunca se conecto a nada.
// Verificado leyendo el codigo (no supuesto): SyncService no inyecta
// Repository<SyncEvent> en ningun lado — el `interface SyncEvent` que usa es
// un tipo local en memoria para el payload entrante, sin relacion con la
// entidad TypeORM. `SyncEvent` tampoco esta en el
// arreglo de entidades registradas via TypeOrmModule en sync.module.ts. La entidad
// (src/sync/entities/sync-event.entity.ts) se elimino del codigo en el mismo
// cambio que esta migracion.
//
// La migracion original (CreateTallerTables1738852000000) construyo esta
// tabla con un diseño (status/retries/error_message) que nunca coincidio ni
// con la entidad ni con la demo real (server_id/user_id/device_id/processed/
// error) — un diseño que se abandono antes de conectarse a nada, en vez de
// una tabla que reconciliar.
//
// Por eso DROP, no CREATE con la forma correcta: reconciliar el esquema de
// una tabla que ningun codigo usa solo perpetuaria la confusion (el proximo
// que la vea asumiria que el log de sync esta activo). Si el dia de mañana
// se quiere loguear eventos de sync de verdad, mejor diseñarlo desde cero
// contra el requisito real de ese momento que resucitar este intento a medio
// terminar.
//
// Verificado en tiempo de ejecucion, nunca asumido: si la tabla tiene
// filas, esto ABORTA en vez de borrar datos.
//
// NOTA PARA QUIEN LEA EL HISTORIAL DE MIGRACIONES DE ACA EN ADELANTE: la
// cadena completa es CreateTallerTables1738852000000 CREA taller_sync_events,
// y esta migracion, mucho despues, la BORRA. Es intencional y seguro — nunca
// se edita una migracion ya aplicada (regla del proyecto) — no un error ni
// un olvido. Corrida y verificada contra la demo real (mbinvautocentrorodriguez,
// autorizado explicitamente): 0 filas confirmadas inmediatamente antes de
// borrar, tabla eliminada de los dos lados (la demo y las bases de
// aislamiento) el mismo dia.
export class DropUnusedSyncEvents1770700000000 implements MigrationInterface {
  public async up(queryRunner: QueryRunner): Promise<void> {
    const table = await queryRunner.getTable("taller_sync_events");
    if (!table) return; // ya no existe — no-op

    const [{ c }] = await queryRunner.query(
      "SELECT COUNT(*) as c FROM taller_sync_events",
    );
    if (Number(c) > 0) {
      throw new Error(
        `taller_sync_events tiene ${c} fila(s) — ABORTA. Esta migracion solo borra la tabla ` +
          "si esta vacia (nunca se conecto a ningun codigo real, ver comentario arriba); " +
          "si hay datos, alguien los escribio por otra via y hay que decidir a mano que hacer con ellos " +
          "antes de borrar la tabla.",
      );
    }

    await queryRunner.dropTable("taller_sync_events");
  }

  // No-op deliberado: no se recrea la tabla al revertir — si algo la
  // necesita de nuevo, que se diseñe contra el requisito real de ese
  // momento (ver comentario en up()), no que se restaure este intento
  // abandonado.
  public async down(): Promise<void> {}
}
