import {
  Column,
  Entity,
  Index,
  JoinColumn,
  ManyToOne,
  OneToMany,
  PrimaryGeneratedColumn,
} from 'typeorm';
import { AddressEntity } from './address.entity';
import { StateEntity } from './state.entity';

export enum CityIds {
  tehran = 1,
  karaj = 74,
}
@Index('stateId', ['stateId'], {})
@Entity('cities')
export class CityEntity {
  @PrimaryGeneratedColumn({ type: 'int', name: 'id' })
  id: number;

  @Column('varchar', { name: 'name', length: 255 })
  name: string;

  @Column('int', { name: 'stateId' })
  stateId: number;

  @Column('varchar', { name: 'mahexCode', length: 45 })
  mahexCode: string;

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

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

  /**
   * Relations
   */
  @ManyToOne(() => StateEntity, (states) => states.cities, {
    onDelete: 'NO ACTION',
    onUpdate: 'CASCADE',
  })
  @JoinColumn([{ name: 'stateId', referencedColumnName: 'id' }])
  state: StateEntity;

  @OneToMany(() => AddressEntity, (addresses) => addresses.userId)
  addresses: AddressEntity[];
}
