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

@Entity({ schema: 'billing', name: 'lanes' })
@Index('idx_lane_tenant', ['tenantId'])
@Index('idx_lane_codigo', ['tenantId', 'codigo'], { unique: true })
export class Lane {
  @PrimaryGeneratedColumn('uuid')
  id: string;

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

  // Identificación
  @Column({ type: 'varchar', length: 50 })
  codigo: string;

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

  // Origen
  @Column({ name: 'origen_ciudad', type: 'varchar', length: 100 })
  origenCiudad: string;

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

  @Column({ name: 'origen_codigo_postal', type: 'varchar', length: 10, nullable: true })
  origenCodigoPostal: string | null;

  // Destino
  @Column({ name: 'destino_ciudad', type: 'varchar', length: 100 })
  destinoCiudad: string;

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

  @Column({ name: 'destino_codigo_postal', type: 'varchar', length: 10, nullable: true })
  destinoCodigoPostal: string | null;

  // Distancia
  @Column({ name: 'distancia_km', type: 'decimal', precision: 10, scale: 2, nullable: true })
  distanciaKm: number | null;

  @Column({ name: 'tiempo_estimado_horas', type: 'decimal', precision: 6, scale: 2, nullable: true })
  tiempoEstimadoHoras: number | null;

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

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

  @Column({ name: 'created_by_id', type: 'uuid' })
  createdById: string;

  // Helpers
  get descripcionCorta(): string {
    return `${this.origenCiudad} → ${this.destinoCiudad}`;
  }

  get descripcionCompleta(): string {
    return `${this.origenCiudad}, ${this.origenEstado} → ${this.destinoCiudad}, ${this.destinoEstado}`;
  }
}
