import { AddOnsPricing } from "src/modules/add-ons-pricing/entities/add-ons-pricing.entity"
import { TripAddonsPricing } from "src/modules/trips/entities/trip-addons-pricing.entity"
import { TripBabySeat } from "src/modules/trips/entities/trip-baby-seat.entity"
import { Trip } from "src/modules/trips/entities/trip.entity"
import { VehicleModel } from "src/modules/vehicle-model/entities/vehicle-model.entity"
import {
  Entity,
  PrimaryGeneratedColumn,
  Column,
  CreateDateColumn,
  UpdateDateColumn,
  DeleteDateColumn,
  ManyToMany,
  OneToMany,
} from "typeorm"

@Entity("add_ons")
export class AddOn {
  @PrimaryGeneratedColumn()
  id: number

  @Column()
  name: string

  @Column({ nullable: true })
  description: string

  @Column({ type: Boolean, default: true })
  is_editable: boolean

  @ManyToMany(() => VehicleModel, (vm) => vm.addOns)
  vehicleModels: VehicleModel[]

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

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

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

  @ManyToMany(() => Trip, (trip) => trip.addons)
  trips: Trip[]

  @OneToMany(() => AddOnsPricing, (pricing) => pricing.add_on)
  add_ons_pricing: AddOnsPricing[]

  @OneToMany(
    () => TripAddonsPricing,
    (trip_addons_pricing) => trip_addons_pricing.add_on,
  )
  trip_addons_pricing: TripAddonsPricing[]

  // AddOn.ts
  @OneToMany(() => TripBabySeat, (babySeat) => babySeat.addon)
  babySeats: TripBabySeat[]
}
