/**
 * ReglaEscalamiento Entity
 * ERP Transportistas
 *
 * Rules for escalating unresponded trips.
 * Module: MAI-005 Despacho
 * Adapted from: erp-mecanicas-diesel MMD-011 EscalationRule
 */

import {
  Entity,
  PrimaryGeneratedColumn,
  Column,
  CreateDateColumn,
  UpdateDateColumn,
  Index,
} from 'typeorm';

export enum CanalNotificacion {
  EMAIL = 'email',
  SMS = 'sms',
  WHATSAPP = 'whatsapp', // Default for transport
  PUSH = 'push',
  CALL = 'call',
}

@Entity({ name: 'reglas_escalamiento', schema: 'despacho' })
@Index('idx_reglas_escalamiento_tenant', ['tenantId'])
@Index('idx_reglas_escalamiento_trigger', ['tenantId', 'dispararDespuesMinutos'])
export class ReglaEscalamiento {
  @PrimaryGeneratedColumn('uuid')
  id: string;

  @Column({ name: 'tenant_id', type: 'uuid' })
  tenantId: string;

  @Column({ type: 'varchar', length: 100 })
  nombre: string;

  @Column({ type: 'text', nullable: true })
  descripcion?: string;

  // Trigger conditions
  @Column({ name: 'disparar_despues_minutos', type: 'integer' })
  dispararDespuesMinutos: number;

  @Column({ name: 'disparar_estado', type: 'varchar', length: 50, nullable: true })
  dispararEstado?: string;

  @Column({ name: 'disparar_prioridad', type: 'varchar', length: 20, nullable: true })
  dispararPrioridad?: string;

  // Escalation target
  @Column({ name: 'escalar_a_rol', type: 'varchar', length: 50 })
  escalarARol: string;

  @Column({ name: 'escalar_a_usuarios', type: 'uuid', array: true, nullable: true })
  escalarAUsuarios?: string[];

  // Notification (default whatsapp for transport)
  @Column({
    name: 'canal_notificacion',
    type: 'varchar',
    length: 20,
    default: CanalNotificacion.WHATSAPP,
  })
  canalNotificacion: CanalNotificacion;

  @Column({ name: 'plantilla_notificacion', type: 'text', nullable: true })
  plantillaNotificacion?: string;

  @Column({ name: 'datos_notificacion', type: 'jsonb', default: {} })
  datosNotificacion: Record<string, any>;

  // Repeat
  @Column({ name: 'intervalo_repeticion_minutos', type: 'integer', nullable: true })
  intervaloRepeticionMinutos?: number;

  @Column({ name: 'max_escalamientos', type: 'integer', default: 3 })
  maxEscalamientos: number;

  @Column({ type: 'boolean', default: true })
  activo: boolean;

  @CreateDateColumn({ name: 'created_at', type: 'timestamptz' })
  createdAt: Date;

  @UpdateDateColumn({ name: 'updated_at', type: 'timestamptz' })
  updatedAt: Date;

  @Column({ name: 'created_by', type: 'uuid', nullable: true })
  createdBy?: string;
}
