import {
  Entity,
  PrimaryGeneratedColumn,
  Column,
  CreateDateColumn,
  Index,
} from 'typeorm';
import { EstadoGasto } from './carga-combustible.entity';

/**
 * Tipo de Pago de Peaje
 */
export enum TipoPagoPeaje {
  EFECTIVO = 'EFECTIVO',
  TAG = 'TAG',
  PREPAGO = 'PREPAGO',
}

@Entity({ schema: 'fuel', name: 'cruces_peaje' })
@Index('idx_peaje_unidad', ['unidadId'])
@Index('idx_peaje_viaje', ['viajeId'])
@Index('idx_peaje_fecha', ['tenantId', 'fechaCruce'])
export class CrucePeaje {
  @PrimaryGeneratedColumn('uuid')
  id: string;

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

  // Unidad y viaje
  @Column({ name: 'unidad_id', type: 'uuid' })
  unidadId: string;

  @Column({ name: 'viaje_id', type: 'uuid', nullable: true })
  viajeId: string | null;

  @Column({ name: 'operador_id', type: 'uuid', nullable: true })
  operadorId: string | null;

  // Peaje
  @Column({ name: 'caseta_nombre', type: 'varchar', length: 200 })
  casetaNombre: string;

  @Column({ name: 'caseta_codigo', type: 'varchar', length: 50, nullable: true })
  casetaCodigo: string | null;

  @Column({ type: 'varchar', length: 200, nullable: true })
  carretera: string | null;

  // Monto
  @Column({ type: 'decimal', precision: 10, scale: 2 })
  monto: number;

  @Column({ name: 'tipo_pago', type: 'varchar', length: 20, nullable: true })
  tipoPago: string | null;

  // TAG
  @Column({ name: 'tag_numero', type: 'varchar', length: 50, nullable: true })
  tagNumero: string | null;

  // Ubicación
  @Column({ type: 'decimal', precision: 10, scale: 7, nullable: true })
  latitud: number | null;

  @Column({ type: 'decimal', precision: 10, scale: 7, nullable: true })
  longitud: number | null;

  // Fecha
  @Column({ name: 'fecha_cruce', type: 'timestamptz' })
  fechaCruce: Date;

  // Comprobante
  @Column({ name: 'numero_ticket', type: 'varchar', length: 50, nullable: true })
  numeroTicket: string | null;

  @Column({ name: 'foto_ticket_url', type: 'text', nullable: true })
  fotoTicketUrl: string | null;

  // Estado
  @Column({ type: 'enum', enum: EstadoGasto, default: EstadoGasto.APROBADO })
  estado: EstadoGasto;

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