import { typeParser } from '@lib/utils/type-parser';
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { Expose, Transform } from 'class-transformer';
import { IsEnum, IsIn, IsInt, IsOptional, IsString } from 'class-validator';

enum Basictype {
  COM001 = 'COM001', //중대질병
  COM005 = 'COM005', //주의사항
  COM006 = 'COM006', //숨은보험진단
  COM007 = 'COM007', //숨은보험치아
  COM010 = 'COM010', //치아(틀니)
  COM011 = 'COM011', //치아(1년)
  COM012 = 'COM012', //치아(5년)
}

export class CompareBasic {
  @Expose()
  @ApiProperty({ description: '대조기본 id' })
  @IsInt()
  cpbId!: number;

  @Expose()
  @ApiProperty({
    description: `대조기본 타입
                  COM001 : 중대질병
                  COM005 : 주의사항
                  COM006 : 숨은보험진단
                  COM007 : 숨은보험치아
                  COM010 : 치아(틀니)
                  COM011 : 치아(1년)
                  COM012 : 치아(5년)
                  `,
    enum: Basictype,
  })
  @IsEnum(Basictype)
  cpbType!: Basictype;

  @Expose()
  @ApiProperty({ description: '대조기본 질병(진단)코드' })
  @IsString()
  @Transform(({ value }) => value.trim())
  cpbDiseaseCode!: string;

  @Expose()
  @ApiProperty({ description: '대조기본 진단명' })
  @IsString()
  @Transform(({ value }) => value.trim())
  cpbName!: string;

  @Expose()
  @ApiPropertyOptional({ description: '대조기본 진단노출명' })
  @IsString()
  @IsOptional()
  cpbViewName?: string;

  @Expose()
  @ApiProperty({
    description: `대조기본 유병자유무
                  - 1: 유병자, 0: 유병자/건강체 공통)
                  (default: 0)
                  `,
  })
  @IsIn([0, 1])
  @Transform(({ value }) => typeParser.int(value))
  cpbIsSicked: number = 0;

  @Expose()
  @ApiPropertyOptional({ description: '대조기본 수정일시' })
  @IsString()
  @IsOptional()
  cpbUpdatedAt?: string;

  @Expose()
  @ApiProperty({ description: '대조기본 생성일시' })
  @IsString()
  cpbCreatedAt!: string;
}
