import {
  Entity,
  PrimaryGeneratedColumn,
  Column,
  CreateDateColumn,
  UpdateDateColumn,
  DeleteDateColumn,
  ManyToOne,
  JoinColumn,
  ManyToMany,
  JoinTable,
  OneToMany,
} from "typeorm"
import { VehicleManufacturer } from "../../vehicle-manufacturer/entities/vehicle-manufacturer.entity"
import { VehicleType } from "../../vehicle-type/entities/vehicle-type.entity"
import { AddOn } from "src/modules/add-ons/entities/add-ons.entity"
import { FleetManagement } from "src/modules/fleet-management/entities/fleet-management.entity"

@Entity("vehicle_models")
export class VehicleModel {
  @PrimaryGeneratedColumn()
  id: number

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

  @Column({ type: "int" })
  vehicle_manufacture_id: number

  @Column({ type: "int" })
  vehicle_type_id: number

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

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

  @ManyToMany(() => AddOn, (addOn) => addOn.vehicleModels)
  @JoinTable({
    name: "add_on_vehicle_models",
    joinColumn: { name: "vehicle_model_id", referencedColumnName: "id" },
    inverseJoinColumn: { name: "add_on_id", referencedColumnName: "id" },
  })
  addOns: AddOn[]

  @ManyToOne(
    () => VehicleManufacturer,
    (vehicle_manufacture) => vehicle_manufacture.vehicle_models,
  )
  @JoinColumn({ name: "vehicle_manufacture_id" })
  vehicle_manufacture: VehicleManufacturer

  @ManyToOne(() => VehicleType, (vehicle_type) => vehicle_type.vehicle_models)
  @JoinColumn({ name: "vehicle_type_id" })
  vehicle_type: VehicleType

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

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