import {
  BaseEntity,
  Column,
  Entity,
  OneToMany,
  PrimaryGeneratedColumn,
} from 'typeorm';
import { BooleanTransformer } from '../../../utils/transformers/BooleanTransformer';
import { UserEntity } from '../../user/entities/user.entity';
import { DiscountEntity } from '../../discount/entities/discount.entity';
import { PromotionPlanEntity } from '../../promotion-plan/entities/promotion-plan.entity';

@Entity('customers')
export class CustomerEntity extends BaseEntity {
  @PrimaryGeneratedColumn({ type: 'int', name: 'id' })
  id: number;

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

  @Column('varchar', {
    name: 'image',
    length: 255,
    default: () => "'/images/no-photo.jpg'",
  })
  image: string;

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

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

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

  @Column('tinyint', {
    name: 'special',
    width: 1,
    default: () => "'0'",
    transformer: new BooleanTransformer(),
  })
  special: boolean;

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

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

  /**
   * relations
   */
  @OneToMany(() => UserEntity, (users) => users.customer)
  users: UserEntity[];

  @OneToMany(() => DiscountEntity, (discounts) => discounts.customer)
  discounts: DiscountEntity[];

  @OneToMany(
    () => PromotionPlanEntity,
    (promotionPlans) => promotionPlans.customer,
  )
  promotionPlans: PromotionPlanEntity[];
}
