import { Hospital } from "src/modules/hospitals/entities/hospital.entity"
import { Trip } from "src/modules/trips/entities/trip.entity"
import {
  Entity,
  Column,
  PrimaryGeneratedColumn,
  CreateDateColumn,
  UpdateDateColumn,
  DeleteDateColumn,
  ManyToOne,
  JoinColumn,
  OneToOne,
} from "typeorm"

@Entity("trip_intermediate_stops")
export class TripIntermediateStop {
  @PrimaryGeneratedColumn()
  id: number

  @Column({ type: "int", nullable: true })
  trip_id: number

  @Column({ type: "int", nullable: true })
  hospital_id: number

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

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

  @Column({ type: "varchar", nullable: true })
  duration: number

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

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

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

  @Column({ type: "varchar", nullable: true })
  place_id: string // google location place id for the stop

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

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

  @CreateDateColumn({ type: "timestamp", default: () => "NOW()" })
  created_at: Date

  @UpdateDateColumn({ type: "timestamp", default: () => "NOW()" })
  updated_at: Date

  @DeleteDateColumn({ type: "timestamp", nullable: true })
  deleted_at: Date

  @ManyToOne(() => Trip, (trip) => trip.intermediate_stop, {
    onDelete: "CASCADE",
  })
  @JoinColumn({ name: "trip_id" })
  trip: Trip

  @ManyToOne(() => Hospital, (hospital) => hospital.trip_intermediate_stop, {
    onDelete: "CASCADE",
  })
  @JoinColumn({ name: "hospital_id" })
  hospital: Hospital

  @OneToOne(() => Trip, (trip) => trip.current_stop)
  trip_as_current: Trip
}
