/**
 * TurnoOperador Entity
 * ERP Transportistas
 *
 * Shift schedules for operators.
 * Module: MAI-005 Despacho
 * Adapted from: erp-mecanicas-diesel MMD-011 TechnicianShift
 */

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

export enum TipoTurno {
  MATUTINO = 'matutino',
  VESPERTINO = 'vespertino',
  NOCTURNO = 'nocturno',
  JORNADA_COMPLETA = 'jornada_completa',
  GUARDIA = 'guardia',
  DISPONIBLE_24H = 'disponible_24h', // Added for transport
}

@Entity({ name: 'turnos_operador', schema: 'fleet' })
@Index('idx_turnos_operador_tenant', ['tenantId'])
@Index('idx_turnos_operador_fecha', ['tenantId', 'operadorId', 'fechaTurno'])
@Index('idx_turnos_fecha', ['tenantId', 'fechaTurno'])
export class TurnoOperador {
  @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;

  // Schedule
  @Column({ name: 'fecha_turno', type: 'date' })
  fechaTurno: Date;

  @Column({
    name: 'tipo_turno',
    type: 'varchar',
    length: 20,
  })
  tipoTurno: TipoTurno;

  @Column({ name: 'hora_inicio', type: 'time' })
  horaInicio: string;

  @Column({ name: 'hora_fin', type: 'time' })
  horaFin: string;

  // On-call specifics
  @Column({ name: 'en_guardia', type: 'boolean', default: false })
  enGuardia: boolean;

  @Column({ name: 'prioridad_guardia', type: 'integer', default: 0 })
  prioridadGuardia: number;

  // Assignment
  @Column({ name: 'unidad_asignada_id', type: 'uuid', nullable: true })
  unidadAsignadaId?: string;

  // Status
  @Column({ name: 'hora_inicio_real', type: 'timestamptz', nullable: true })
  horaInicioReal?: Date;

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

  @Column({ type: 'boolean', default: false })
  ausente: boolean;

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

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

  @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;
}
