import { Entity, Column, ManyToOne, JoinColumn, Index } from 'typeorm';
import { BaseEntity } from '../database/base.entity';
import { BookingActivityItemEntity } from './booking-activity-item.entity';
import { SupplierEntity } from './supplier.entity';
import { DriverEntity } from './driver.entity';

/**
 * One row per (activity_item, supplier) assignment. See
 * BookingTransportItemSupplierEntity for the design rationale — same
 * shape, different parent.
 */
@Entity('booking_activity_item_suppliers')
@Index(['tenant_id', 'activity_item_id'])
@Index(['tenant_id', 'supplier_id'])
export class BookingActivityItemSupplierEntity extends BaseEntity {
  @ManyToOne(() => BookingActivityItemEntity, { onDelete: 'CASCADE' })
  @JoinColumn({ name: 'activity_item_id' })
  activity_item: BookingActivityItemEntity;

  @Column({ type: 'uuid' })
  activity_item_id: string;

  @ManyToOne(() => SupplierEntity, { nullable: true })
  @JoinColumn({ name: 'supplier_id' })
  supplier: SupplierEntity | null;

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

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

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

  @Column({ type: 'varchar', length: 30, default: 'primary' })
  role: string;

  @Column({ type: 'int', default: 0 })
  sort_order: number;

  @Column({ type: 'decimal', precision: 12, scale: 2, nullable: true })
  actual_supplier_cost: number | null;

  @ManyToOne(() => DriverEntity, { nullable: true })
  @JoinColumn({ name: 'driver_id' })
  driver: DriverEntity | null;

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

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

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