import { ProductMakerBrandMappingEntity } from 'src/modules/product/entities/product-maker-brand-mapping.entity';
import { BooleanTransformer } from 'src/utils/transformers/BooleanTransformer';
import {
  BaseEntity,
  Column,
  Entity,
  Index,
  JoinColumn,
  ManyToOne,
  OneToMany,
  PrimaryGeneratedColumn,
} from 'typeorm';
import { DecimalTransformer } from '../../../utils/transformers/DecimalTransformer';
import { CarEntity } from './car.entity';
import { MakerEntity } from './maker.entity';

@Index('makerId', ['makerId'], {})
@Entity('makerbrands')
export class MakerBrandEntity extends BaseEntity {
  @PrimaryGeneratedColumn({ type: 'int', name: 'id' })
  id: number;

  @Column('int', { name: 'makerId', nullable: true })
  makerId: number | null;

  @Column('varchar', { name: 'name', nullable: true, length: 50 })
  name: string | null;

  @Column('int', { name: 'displayOrder', nullable: true })
  displayOrder: number | null;

  @Column('varchar', {
    name: 'image',
    nullable: true,
    length: 255,
    default: () => "'/uploads/images/no-image.png'",
  })
  image: string | null;

  @Column('decimal', {
    name: 'oilUseWithFilter',
    nullable: true,
    precision: 10,
    scale: 2,
    transformer: new DecimalTransformer(),
  })
  oilUseWithFilter: number | null;

  @Column('decimal', {
    name: 'oilUseWithoutFilter',
    nullable: true,
    precision: 10,
    scale: 2,
    transformer: new DecimalTransformer(),
  })
  oilUseWithoutFilter: number | null;

  @Column('varchar', {
    name: 'oilTechnical',
    nullable: true,
  })
  oilTechnical: string | null;

  @Column('varchar', { name: 'insuranceCarGroup', nullable: true, length: 45 })
  insuranceCarGroup: string | null;

  @Column('int', { name: 'insuranceVehicleCode', nullable: true })
  insuranceVehicleCode: number | null;

  @Column('text', { name: 'insuranceCarModels', nullable: true })
  insuranceCarModels: string | null;

  @Column('tinyint', {
    name: 'deleted',
    nullable: true,
    width: 1,
    default: () => "'0'",
    transformer: new BooleanTransformer(),
  })
  deleted: boolean | null;

  @Column('datetime', { name: 'createdAt' })
  createdAt: Date;

  @Column('datetime', { name: 'updatedAt' })
  updatedAt: Date;

  /**
   * relations
   */
  @OneToMany(() => CarEntity, (cars) => cars.makerBrand)
  cars: CarEntity[];

  @ManyToOne(() => MakerEntity, (makers) => makers.makerbrands, {
    onDelete: 'CASCADE',
    onUpdate: 'CASCADE',
  })
  @JoinColumn([{ name: 'makerId', referencedColumnName: 'id' }])
  maker: MakerEntity;

  @OneToMany(
    () => ProductMakerBrandMappingEntity,
    (productMappings) => productMappings.makerBrand,
  )
  productMappings: ProductMakerBrandMappingEntity[];

  // @OneToMany(
  //   () => PackageBrandMappings,
  //   (packageBrandMappings) => packageBrandMappings.makerBrand,
  // )
  // packageBrandMappings: PackageBrandMappings[];
}
