import { MigrationInterface, QueryRunner, TableColumn } from "typeorm";

// Dos columnas nullable, aditivas -- por default NULL en filas existentes,
// que OtsService/TallerParametrosController tratan como "sin restriccion"
// (mismo comportamiento que tienen hoy). Ningun usuario existente cambia de
// comportamiento hasta que alguien los edite explicitamente desde
// /dashboard/usuarios.
export class AddUsuarioAccessRestrictions1780800000000
  implements MigrationInterface
{
  name = "AddUsuarioAccessRestrictions1780800000000";

  public async up(queryRunner: QueryRunner): Promise<void> {
    const table = await queryRunner.getTable("taller_usuarios");
    if (!table) return;

    if (!table.findColumnByName("facturacion_pos_tienda_ids")) {
      await queryRunner.addColumn(
        "taller_usuarios",
        new TableColumn({
          name: "facturacion_pos_tienda_ids",
          type: "json",
          isNullable: true,
        }),
      );
    }

    if (!table.findColumnByName("estados_visibles")) {
      await queryRunner.addColumn(
        "taller_usuarios",
        new TableColumn({
          name: "estados_visibles",
          type: "json",
          isNullable: true,
        }),
      );
    }
  }

  public async down(queryRunner: QueryRunner): Promise<void> {
    const table = await queryRunner.getTable("taller_usuarios");
    if (!table) return;

    if (table.findColumnByName("estados_visibles")) {
      await queryRunner.dropColumn("taller_usuarios", "estados_visibles");
    }
    if (table.findColumnByName("facturacion_pos_tienda_ids")) {
      await queryRunner.dropColumn("taller_usuarios", "facturacion_pos_tienda_ids");
    }
  }
}
