import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { Expose } from 'class-transformer';
import { IsInt, IsOptional, IsString } from 'class-validator';

export class ClinicalResultMajor {
  @Expose()
  @ApiProperty({ description: '대분류 ID' })
  @IsInt()
  crmId!: number;

  @Expose()
  @ApiProperty({ description: '코드노출명' })
  @IsString()
  crmDisplayName!: string;

  @Expose()
  @ApiPropertyOptional({ description: '등록일' })
  @IsString()
  @IsOptional()
  crmRegDate?: string;

  @Expose()
  @ApiPropertyOptional({ description: '수정일' })
  @IsString()
  @IsOptional()
  crmUpdDate?: string;
}

export class ClinicalResultMiddle {
  @Expose()
  @ApiProperty({ description: '중분류 ID' })
  @IsInt()
  crmiId!: number;

  @Expose()
  @ApiProperty({ description: '대분류 ID' })
  @IsInt()
  crmId!: number;

  @Expose()
  @ApiProperty({ description: '코드명' })
  @IsString()
  crmiDisplayName!: string;

  @Expose()
  @ApiPropertyOptional({ description: '등록일' })
  @IsString()
  @IsOptional()
  crmiRegDate?: string;

  @Expose()
  @ApiPropertyOptional({ description: '수정일' })
  @IsString()
  @IsOptional()
  crmiUpdDate?: string;
}

export class ClinicalResultFlat {
  @Expose()
  @ApiProperty({ description: '중분류 ID' })
  @IsInt()
  iscId!: number;

  @Expose()
  @ApiPropertyOptional({ description: '대분류 ID' })
  @IsInt()
  @IsOptional()
  iscCodeId?: number | null;

  @Expose()
  @ApiPropertyOptional({ description: '대분류명(코드노출명)' })
  @IsString()
  @IsOptional()
  iscCode?: string | null;

  @Expose()
  @ApiProperty({ description: '중분류명(코드명)' })
  @IsString()
  iscName!: string;

  @Expose()
  @ApiPropertyOptional({ description: '등록일' })
  @IsString()
  @IsOptional()
  iscCreatedAt?: string | null;

  @Expose()
  @ApiPropertyOptional({ description: '수정일' })
  @IsString()
  @IsOptional()
  iscUpdatedAt?: string | null;
}

export class ClinicalResultMajorItem {
  @Expose()
  @ApiProperty({ description: '대분류 ID' })
  @IsInt()
  crmId!: number;

  @Expose()
  @ApiProperty({ description: '대분류명(코드명)' })
  @IsString()
  crmName!: string;
}
