export class Sample {}
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';

export enum AlimtalkState {
  성공 = 'ALT001',
  실패 = 'ALT002',
}

export enum AlimtalkType {
  결제 = 'SND001',
  분석 = 'SND002',
  충전 = 'SND003',
  실손추가 = 'SND004',
  진료분석리마인드 = 'SND005',
  실손분석리마인드 = 'SND006',
}
export class Alimtalk {
  @Expose()
  @ApiProperty({ description: '알림톡 id' })
  @Transform(({ value }) => typeParser.int(value))
  @IsInt()
  altId!: number;

  @Expose()
  @ApiProperty({
    description: '알림톡 분석요청사용여부(1:사용 | 0:미사용)',
  })
  @Transform(({ value }) => typeParser.int(value))
  @IsIn([0, 1])
  altUsed!: number;

  @Expose()
  @ApiPropertyOptional({
    description: '알림톡코드(분석시의 유저의 엔드포인트 URL)',
  })
  @IsString()
  @IsOptional()
  altCode?: string;

  @Expose()
  @ApiProperty({ description: '알림톡 수신자이름' })
  @IsString()
  altName!: string;

  @Expose()
  @ApiProperty({ description: '알림톡 수신자연락처' })
  @IsString()
  altPhone!: string;

  @Expose()
  @ApiPropertyOptional({ description: '알림톡 거래번호' })
  @Transform(({ value }) => typeParser.int(value))
  @IsInt()
  @IsOptional()
  altMid?: number;

  @Expose()
  @ApiPropertyOptional({ description: '알리고 대체문자 거래번호' })
  @Transform(({ value }) => typeParser.int(value))
  @IsInt()
  altSmid?: number;

  @Expose()
  @ApiProperty({ description: '알림톡 템플릿코드' })
  @IsString()
  altTemplateCode!: string;

  @Expose()
  @ApiProperty({
    description: `알림톡 발송타입(결제: SND001 | 분석: SND002 | 충전: SND003 | 실손추가: SND004 | 진료분석리마인드: SND005 | 실손분석리마인드: SND006)`,
    enum: AlimtalkType,
  })
  @IsEnum(AlimtalkType)
  altType!: AlimtalkType;

  @Expose()
  @ApiProperty({
    description: `알림톡 발송요청상태(성공:ALT001 | 실패:ALT002)`,
    enum: AlimtalkState,
  })
  @IsEnum(AlimtalkState)
  altRequestState!: AlimtalkState;

  @Expose()
  @ApiPropertyOptional({
    description: `알림톡 발송완료상태(성공:ALT001 | 실패:ALT002)`,
    enum: AlimtalkState,
  })
  @IsEnum(AlimtalkState)
  altCompletionState?: AlimtalkState | null;

  @Expose()
  @ApiPropertyOptional({
    description: `알림톡 대체문자발송완료상태(성공:ALT001 | 실패:ALT002)`,
    enum: AlimtalkState,
  })
  @IsEnum(AlimtalkState)
  altSmsCompletionState?: AlimtalkState | null;

  @Expose()
  @ApiPropertyOptional({ description: '알림톡 발송요청 결과메세지' })
  @IsString()
  @IsOptional()
  altRequestMessage?: string | null;

  @Expose()
  @ApiPropertyOptional({ description: '알림톡 발송완료 결과메세지' })
  @IsString()
  @IsOptional()
  altCompletionMessage?: string;

  @Expose()
  @ApiPropertyOptional({
    description: `알림톡 대체문자 발송완료여부메세지`,
  })
  @IsString()
  @IsOptional()
  altSmsCompletionMessage?: string | null;

  @Expose()
  @ApiPropertyOptional({ description: '알림톡 요청시의 포인트 잔액' })
  @Transform(({ value }) => typeParser.int(value))
  @IsInt()
  @IsOptional()
  altCurrent?: number;

  @Expose()
  @ApiPropertyOptional({ description: '알림톡 정상적으로 요청된 갯수' })
  @Transform(({ value }) => typeParser.int(value))
  @IsInt()
  @IsOptional()
  altScnt?: number;

  @Expose()
  @ApiPropertyOptional({ description: '알림톡 잘못요청된 갯수' })
  @Transform(({ value }) => typeParser.int(value))
  @IsInt()
  @IsOptional()
  altFcnt?: number;

  @Expose()
  @ApiPropertyOptional({ description: '알림톡 발송완료일시' })
  @IsString()
  @IsOptional()
  altSendCompletedAt?: string;

  @Expose()
  @ApiPropertyOptional({ description: '알림톡 수정일시' })
  @IsString()
  @IsOptional()
  altUpdatedAt?: string;

  @Expose()
  @ApiProperty({ description: '알림톡 생성일시' })
  @IsString()
  altCreatedAt!: string;
}
