// apps/edr-freight-api/src/modules/container-management/entities/container.entity.ts
import { Entity, Column, ManyToOne, OneToMany, JoinColumn } from 'typeorm';
import { BaseEntity } from '@edr/api-common';
import { Wagon } from '../../wagons/entities/wagon.entity';
import { Cargo } from '../../cargoes/entities/cargoes.entity';

@Entity({ name: 'containers', schema: 'freight' })
export class Container extends BaseEntity {
  @Column({ unique: true, name: 'container_number' })
  containerNumber!: string;

  @Column({ name: 'container_type_id', type: 'uuid' })
  containerTypeId!: string;

  @Column({ name: 'wagon_id', type: 'uuid', nullable: true })
  wagonId!: string | null;

  @Column({ type: 'int', nullable: true })
  position!: number | null; // position on the wagon (1..N)

  @Column({ name: 'tare_weight', type: 'decimal', precision: 10, scale: 2 })
  tareWeight!: number;

  @Column({ name: 'max_gross_weight', type: 'decimal', precision: 10, scale: 2 })
  maxGrossWeight!: number;

  @Column({
  name: 'seal_number',
  type: 'varchar',
  nullable: true,
})
sealNumber!: string | null;

  @Column({ type: 'varchar', default: 'AVAILABLE' })
  status!: string; // AVAILABLE, LOADED, IN_TRANSIT, MAINTENANCE, DAMAGED

  // Relationship to Wagon
  @ManyToOne(() => Wagon, (wagon) => wagon.containers, { onDelete: 'SET NULL' })
  @JoinColumn({ name: 'wagon_id' })
  wagon!: Wagon | null;

  // Relationship to Cargo
  @OneToMany(() => Cargo, (cargo) => cargo.container)
  cargoes!: Cargo[];
}