/**
 * OperadorCertificacion Entity
 * ERP Transportistas
 *
 * Certifications and licenses of operators.
 * Module: MAI-005 Despacho
 * Adapted from: erp-mecanicas-diesel MMD-011 TechnicianSkill
 */

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

export enum NivelCertificacion {
  BASICO = 'basico',
  INTERMEDIO = 'intermedio',
  AVANZADO = 'avanzado',
  EXPERTO = 'experto',
  FEDERAL = 'federal', // Added for SCT licenses
}

/**
 * Codigos de certificacion especificos para transporte:
 * - LIC_FEDERAL: Licencia federal de conductor
 * - CERT_MP: Materiales peligrosos
 * - CERT_REFRIGERADO: Operacion de equipos refrigerados
 * - CERT_GRUA: Operacion de gruas
 * - ANTIDOPING: Certificado antidoping vigente
 * - FISICO: Examen medico vigente
 */

@Entity({ name: 'certificaciones_operador', schema: 'fleet' })
@Index('idx_certificaciones_tenant', ['tenantId'])
@Index('idx_certificaciones_operador', ['tenantId', 'operadorId'])
@Index('idx_certificaciones_codigo', ['tenantId', 'codigoCertificacion'])
export class OperadorCertificacion {
  @PrimaryGeneratedColumn('uuid')
  id: string;

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

  // Operador reference (FK a fleet.operadores)
  @Column({ name: 'operador_id', type: 'uuid' })
  operadorId: string;

  // Certification definition
  @Column({ name: 'codigo_certificacion', type: 'varchar', length: 50 })
  codigoCertificacion: string;

  @Column({ name: 'nombre_certificacion', type: 'varchar', length: 100 })
  nombreCertificacion: string;

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

  @Column({
    type: 'varchar',
    length: 20,
    default: NivelCertificacion.BASICO,
  })
  nivel: NivelCertificacion;

  // Certification details
  @Column({ name: 'numero_certificado', type: 'varchar', length: 100, nullable: true })
  numeroCertificado?: string;

  @Column({ name: 'fecha_certificacion', type: 'date', nullable: true })
  fechaCertificacion?: Date;

  @Column({ name: 'vigencia_hasta', type: 'date', nullable: true })
  vigenciaHasta?: Date;

  @Column({ name: 'documento_url', type: 'varchar', length: 500, nullable: true })
  documentoUrl?: string;

  // Status
  @Column({ type: 'boolean', default: true })
  activa: boolean;

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

  @Column({ name: 'verificado_en', type: 'timestamptz', nullable: true })
  verificadoEn?: Date;

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

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