import {
  Entity,
  PrimaryGeneratedColumn,
  Column,
  Index,
  ManyToOne,
  JoinColumn,
} from 'typeorm';
import { CartaPorte } from './carta-porte.entity';

/**
 * Remolque para Carta Porte
 */
export interface RemolqueCartaPorte {
  subTipoRem: string;  // Clave SAT del subtipo de remolque
  placa: string;
}

@Entity({ schema: 'compliance', name: 'autotransporte_carta_porte' })
@Index('idx_autotransporte_carta', ['cartaPorteId'])
export class AutotransporteCartaPorte {
  @PrimaryGeneratedColumn('uuid')
  id: string;

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

  @Column({ name: 'carta_porte_id', type: 'uuid' })
  cartaPorteId: string;

  @ManyToOne(() => CartaPorte, (cp) => cp.autotransporte)
  @JoinColumn({ name: 'carta_porte_id' })
  cartaPorte: CartaPorte;

  // Permiso
  @Column({ name: 'perm_sct', type: 'varchar', length: 10 })
  permSct: string;

  @Column({ name: 'num_permiso_sct', type: 'varchar', length: 50 })
  numPermisoSct: string;

  // Identificación vehicular tractora
  @Column({ name: 'config_vehicular', type: 'varchar', length: 10 })
  configVehicular: string;

  @Column({ name: 'placa_vm', type: 'varchar', length: 15 })
  placaVm: string;

  @Column({ name: 'anio_modelo_vm', type: 'int', nullable: true })
  anioModeloVm: number | null;

  // Remolques
  @Column({ type: 'jsonb', nullable: true })
  remolques: RemolqueCartaPorte[] | null;

  // Helpers
  get tieneRemolques(): boolean {
    return Array.isArray(this.remolques) && this.remolques.length > 0;
  }

  get cantidadRemolques(): number {
    return this.remolques?.length || 0;
  }

  get placasRemolques(): string[] {
    return this.remolques?.map(r => r.placa) || [];
  }

  get configCompleta(): string {
    const base = `${this.configVehicular} (${this.placaVm})`;
    if (this.tieneRemolques) {
      const remolquesStr = this.placasRemolques.join(', ');
      return `${base} + Remolques: ${remolquesStr}`;
    }
    return base;
  }
}
