/**
 * ComisionRecorrido Entity
 * Recorridos de verificación de comisión de seguridad
 *
 * @module HSE
 * @table hse.comision_recorridos
 * @ddl schemas/03-hse-schema-ddl.sql
 * @rf RF-MAA017-005
 */

import {
  Entity,
  PrimaryGeneratedColumn,
  Column,
  CreateDateColumn,
  UpdateDateColumn,
  ManyToOne,
  JoinColumn,
} from 'typeorm';
import { ComisionSeguridad } from './comision-seguridad.entity';

export type EstadoRecorrido = 'programado' | 'realizado' | 'cancelado' | 'pendiente';

@Entity({ schema: 'hse', name: 'comision_recorridos' })
export class ComisionRecorrido {
  @PrimaryGeneratedColumn('uuid')
  id: string;

  @Column({ name: 'comision_id', type: 'uuid' })
  comisionId: string;

  @Column({ name: 'fecha_programada', type: 'date' })
  fechaProgramada: Date;

  @Column({ name: 'fecha_realizada', type: 'date', nullable: true })
  fechaRealizada: Date;

  @Column({ name: 'numero_acta', type: 'varchar', length: 50, nullable: true })
  numeroActa: string;

  @Column({ name: 'areas_recorridas', type: 'text', nullable: true })
  areasRecorridas: string;

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

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

  @Column({
    type: 'enum',
    enum: ['programado', 'realizado', 'cancelado', 'pendiente'],
    default: 'programado',
  })
  estado: EstadoRecorrido;

  @Column({ name: 'documento_acta_url', type: 'varchar', length: 500, nullable: true })
  documentoActaUrl: string;

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

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

  // Relations
  @ManyToOne(() => ComisionSeguridad, (c) => c.recorridos, { onDelete: 'CASCADE' })
  @JoinColumn({ name: 'comision_id' })
  comision: ComisionSeguridad;
}
