import {
  Entity,
  PrimaryGeneratedColumn,
  Column,
  CreateDateColumn,
  UpdateDateColumn,
  DeleteDateColumn,
  OneToMany,
} from "typeorm"
import { VehicleModel } from "../../vehicle-model/entities/vehicle-model.entity"
import { FleetManagement } from "src/modules/fleet-management/entities/fleet-management.entity"
import { Customer } from "src/modules/customers/entities/customer.entity"
import { VehiclePricing } from "src/modules/vehicle-pricing/entities/vehicle-pricing.entity"
import { AddOnsPricing } from "src/modules/add-ons-pricing/entities/add-ons-pricing.entity"
import { TripBasePricing } from "src/modules/trips/entities/trip-base-pricing.entity"

@Entity("vehicle_types")
export class VehicleType {
  @PrimaryGeneratedColumn()
  id: number

  @Column({ type: "varchar" })
  name: string

  @Column({ type: "smallint", default: 1 })
  status: number

  @OneToMany(
    () => VehicleModel,
    (vehicle_models) => vehicle_models.vehicle_type,
  )
  vehicle_models: VehicleModel[]

  @OneToMany(
    () => FleetManagement,
    (fleetManagement) => fleetManagement.vehicle_type,
  )
  fleetManagements: FleetManagement[]

  @OneToMany(() => Customer, (customer) => customer.vehicle_type)
  customer: Customer[]

  @OneToMany(
    () => VehiclePricing,
    (vehicle_pricing) => vehicle_pricing.vehicle_type,
  )
  vehicle_pricing: VehiclePricing[]

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

  @OneToMany(() => TripBasePricing, (base_pricing) => base_pricing.vehicle_type)
  base_pricing: TripBasePricing[]

  @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
}
