import { UserEntity } from 'src/modules/user/entities/user.entity';
import {
  Column,
  Entity,
  Index,
  JoinColumn,
  ManyToOne,
  PrimaryGeneratedColumn,
  BaseEntity,
} from 'typeorm';
import { NewsEntity } from './news.entity';

export enum NewsCommentStatus {
  pending = 'pending',
  accepted = 'accepted',
  rejected = 'rejected',
}

@Index('fk_newscomments_news1_idx', ['newsId'], {})
@Index('fk_newscomments_users1_idx', ['userId'], {})
@Entity('newscomments')
export class NewscommentEntity extends BaseEntity {
  @PrimaryGeneratedColumn({ type: 'int', name: 'id' })
  id: number;

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

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

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

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

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

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

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

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

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

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

  /**
   * Relations
   */
  @ManyToOne(() => NewsEntity, (news) => news.newscomments, {
    onDelete: 'NO ACTION',
    onUpdate: 'NO ACTION',
  })
  @JoinColumn([{ name: 'newsId', referencedColumnName: 'id' }])
  news: NewsEntity;

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