import {
  Column,
  Entity,
  JoinColumn,
  ManyToOne,
  PrimaryGeneratedColumn,
} from "typeorm"
import { CancelReason } from "../../cancel-reasons/entities/cancel-reasons.entity"
import { TeamMember } from "src/modules/team-member/entities/team_member.entity"
import { Customer } from "src/modules/customers/entities/customer.entity"
import { Trip } from "./trip.entity"

@Entity("trip_cancellations")
export class TripCancellation {
  @PrimaryGeneratedColumn()
  id: number

  @Column({ type: "bigint" })
  trip_id: number

  @Column({ type: "varchar", length: 100 })
  canceled_by: string // driver, customer, dispatcher

  @Column({ type: "bigint", nullable: true })
  canceled_by_id: number

  @Column({ type: "bigint", nullable: true })
  reason_id: number

  @Column({ type: "varchar", nullable: true })
  other_input: string

  @Column({ type: "timestamp", default: () => "CURRENT_TIMESTAMP" })
  created_at: Date

  @Column({ type: "timestamp", default: () => "CURRENT_TIMESTAMP" })
  updated_at: Date

  @ManyToOne(() => CancelReason)
  @JoinColumn({ name: "reason_id" })
  reason: CancelReason | null

  @ManyToOne(() => Trip)
  @JoinColumn({ name: "trip_id" })
  trip: Trip | null

  @ManyToOne(() => TeamMember, { createForeignKeyConstraints: false })
  @JoinColumn({ name: "canceled_by_id" })
  cancel_member: TeamMember | null

  @ManyToOne(() => Customer, { createForeignKeyConstraints: false })
  @JoinColumn({ name: "canceled_by_id" })
  cancel_customer: Customer | null
}
