import { Column, Entity, PrimaryColumn } from 'typeorm';
import { ApiProperty } from '@nestjs/swagger';
import { AssetProps } from '../asset/logic/Props';
import {
  decodeBigNumberKey,
  encodeBigNumberKey,
} from '../utils/big-number-key';

@Entity('comment_replies', { schema: 'public' })
export class CommentReplyEntity {
  @PrimaryColumn('uuid', {
    name: 'id',
    nullable: false,
  })
  @ApiProperty({ required: true })
  id: string;

  @Column('uuid', {
    name: 'changed_to_id',
  })
  @ApiProperty({ required: true })
  changedToId: string;

  @Column('uuid', {
    name: 'answer_to_id',
  })
  @ApiProperty({ required: true })
  answerToId: string;

  @PrimaryColumn({
    name: 'project_id',
    nullable: false,
    transformer: {
      from: (x) => encodeBigNumberKey(x),
      to: (x) => decodeBigNumberKey(x),
    },
  })
  @ApiProperty({})
  projectId: string;

  @PrimaryColumn('uuid', {
    name: 'comment_id',
    nullable: false,
  })
  @ApiProperty({ required: true })
  commentId: string;

  @Column('integer', {
    name: 'user_id',
  })
  @ApiProperty({})
  userId: number;

  @Column('jsonb', {
    name: 'content',
  })
  @ApiProperty({})
  content: AssetProps;

  @Column('timestamp with time zone', {
    name: 'created_at',
    nullable: false,
    default: () => 'CURRENT_TIMESTAMP',
  })
  @ApiProperty({})
  createdAt: Date;

  @Column('timestamp with time zone', {
    name: 'updated_at',
    nullable: true,
  })
  @ApiProperty({})
  updatedAt: Date;

  @Column('timestamp with time zone', {
    name: 'deleted_at',
    nullable: true,
  })
  @ApiProperty({})
  deletedAt: Date;
}
