import { Type } from 'class-transformer';
import {
  IsArray,
  IsInt,
  IsOptional,
  IsString,
  ValidateNested,
} from 'class-validator';

class SendInfo {
  /** 알림톡(AT) | 친구톡 (FT)  */
  @IsString()
  type!: string;

  /** 메시지 ID
   * 테스트 모드의 성공일시, 알림톡 요청실패일시 값 없음
   */
  @IsInt()
  mid!: number;

  /** 포인트 (요청시의 포인트) */
  @IsString()
  current!: string;

  /** 개별전송단가 */
  @IsInt()
  unit!: number;

  /** 전제전송단가 */
  @IsInt()
  total!: number;

  /** 정상적으로 요청된 연락처 갯수 */
  @IsInt()
  @IsOptional()
  scnt?: number;

  /** 잘못 요청된 연락처 갯수 */
  @IsInt()
  @IsOptional()
  fcnt?: number;
}

export class SendResponseDto {
  /** 코드 */
  @IsInt()
  code!: number;

  /** 결과 메세지 */
  @IsString()
  message!: string;

  /** 등록된 카드정보 */
  @ValidateNested({ each: true })
  @Type(() => SendInfo)
  @IsOptional()
  info?: SendInfo;
}

//*---------------------------------  알림톡 발송완료여부  ---------------------------------*/

class AlimtalkSendCheckDto {
  @IsString()
  msgid!: string;

  @IsString()
  type!: string;

  @IsString()
  sender!: string;

  @IsString()
  phone!: string;

  @IsString()
  status!: string;

  @IsString()
  reqdate!: string;

  @IsString()
  @IsOptional()
  sentdate?: string;

  @IsString()
  @IsOptional()
  rsltdate?: string;

  @IsString()
  @IsOptional()
  reportdate?: string;

  @IsString()
  @IsOptional()
  rslt?: string;

  @IsString()
  @IsOptional()
  rslt_message?: string;

  @IsString()
  message!: string;

  @IsString()
  button_json!: string;

  @IsString()
  tpl_code!: string;

  @IsString()
  senderKey!: string;

  @IsString()
  smid!: string;
}
export class AlimtalkSendCheckResponseDto {
  /** 코드 */
  @IsInt()
  code!: number;

  /** 결과 메세지 */
  @IsString()
  message!: string;

  @Type(() => AlimtalkSendCheckDto)
  @IsArray()
  @IsOptional()
  list?: AlimtalkSendCheckDto[];
}

//*---------------------------------  문자 발송완료여부  ---------------------------------*/

class SmsSendCheckDto {
  @IsString()
  mdid!: string;

  @IsString()
  type!: string;

  @IsString()
  sender!: string;

  @IsString()
  receiver!: string;

  @IsString()
  sms_state!: string;

  @IsString()
  @IsOptional()
  reg_date?: string;

  @IsString()
  @IsOptional()
  send_date?: string;

  @IsString()
  @IsOptional()
  reserve_date?: string;
}
export class SmsSendCheckResponseDto {
  /** 코드 */
  @IsInt()
  result_code!: number;

  /** 결과 메세지 */
  @IsString()
  message!: string;

  /** 다음페이지 여부 */
  @IsString()
  next_yn!: string;

  @Type(() => SmsSendCheckDto)
  @IsArray()
  @IsOptional()
  list?: SmsSendCheckDto[];
}
