import {
  BaseEntity,
  Column,
  Entity,
  Index,
  JoinColumn,
  ManyToOne,
  PrimaryGeneratedColumn,
} from 'typeorm';
import { OrderEntity } from '../../order/entities/order.entity';
import { UserEntity } from '../../user/entities/user.entity';

export enum ServiceReminderStatus {
  new = 'new',
  seen = 'seen',
  called = 'called',
  done = 'done',
}

@Index('fk_servicereminder_orders1_idx', ['prevOrderId'], {})
@Index('fk_servicereminders_users1_idx', ['userId'], {})
@Entity('servicereminders')
export class ServiceReminderEntity extends BaseEntity {
  @PrimaryGeneratedColumn({ type: 'int', name: 'id' })
  id: number;

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

  @Column('char', { name: 'userId', length: 36 })
  userId: string;

  @Column('int', { name: 'lastSmsKilometer', default: 0 })
  lastSmsKilometer: number;

  @Column('enum', {
    name: 'status',
    enum: ServiceReminderStatus,
    default: () => ServiceReminderStatus.new,
  })
  status: ServiceReminderStatus;

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

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

  /**
   * Relations
   */
  @ManyToOne(() => OrderEntity, (orders) => orders.serviceReminders, {
    onDelete: 'NO ACTION',
    onUpdate: 'NO ACTION',
  })
  @JoinColumn([{ name: 'prevOrderId', referencedColumnName: 'id' }])
  prevOrder: OrderEntity;

  @ManyToOne(() => UserEntity, (users) => users.serviceReminders, {
    onDelete: 'NO ACTION',
    onUpdate: 'NO ACTION',
  })
  @JoinColumn([{ name: 'userId', referencedColumnName: 'id' }])
  user: UserEntity;
}
