/**
 * @description 성공 메세지 상수 객체
 */
export const SUCCESS_MESSAGE = {
  /** 저장 성공 - "저장되었습니다." */
  SAVE_SUCCESS: '保存されました。',

  /** 임시 저장 성공 - "임시 저장되었습니다." */
  TEMP_SAVE_SUCCESS: '一時保存されました。',

  /** 삭제 성공 - "삭제되었습니다." */
  DELETE_SUCCESS: '削除されました。',

  /** 제출 성공 - "제출이 완료되었습니다." */
  SUBMIT_SUCCESS: '提出が完了しました。',

  /** 문의 제목 최대값 메세지 - "문의 제목은 100자 이내로 입력하세요." */
  INQUIRY_TITLE_MAX_LENGTH: 'お問い合わせタイトルは100文字以内で入力してください。',

  /** 문의 내용 최대값 메세지 - "문의 내용은 2,000자 이내로 입력하세요." */
  INQUIRY_CONTENTS_MAX_LENGTH: 'お問い合わせ内容は2,000文字以内で入力してください。',

  /** PDF 생성 성공 - "PDF 생성이 완료되었습니다.\n팝업 창에서 다운로드 하세요." */
  PDF_GENERATION_SUCCESS: 'PDFの生成が完了しました。\nポップアップウィンドウからダウンロードしてください。',
}

/**
 * @description 확인 메세지 상수 객체
 */
export const CONFIRM_MESSAGE = {
  /** 제출 확인 - "전송하시겠습니까? 전송 후에는 수정/삭제 할 수 없습니다." */
  SUBMIT_CONFIRM: '送信しますか？ 送信後は変更・修正することはできません。',

  /** 저장 확인 - "저장하시겠습니까?" */
  SAVE_CONFIRM: '保存しますか？',

  /** 삭제 확인 - "삭제하시겠습니까?" */
  DELETE_CONFIRM: '削除しますか？',

  /** 문의 저장 확인 메세지 - "문의를 등록 하시겠습니까? 한화재팬 담당자에게 문의 메일이 발송됩니다." */
  SAVE_INQUIRY_CONFIRM: 'お問い合わせを登録しますか？ Hanwha Japanの担当者にお問い合わせメールが送信されます。',

  /** 작성 / 수정 취소 확인 메세지 - "변경 내용이 저장되지 않았습니다. 돌아가도 되겠습니까?" */
  EDIT_CANCEL_CONFIRM: '変更内容が保存されていません。戻ってもよろしいですか？',
}

export const WARNING_MESSAGE = {
  /** 입력 오류 경고 메세지 */
  /** 필수 입력 메세지 - "~ 항목이 비어 있습니다."*/
  REQUIRED_FIELD_IS_EMPTY: '項目が空です。',

  /* 전기계약 용량 단위 입력 메세지 - "전기 계약 용량의 단위를 입력하세요."*/
  REQUIRED_UNIT_IS_EMPTY: '電気契約容量の単位を入力してください。',

  /** 이메일 유효성 에러 - "유효한 이메일 주소를 입력해 주세요." */
  EMAIL_PREFIX_IS_INVALID: '有効なメールアドレスを入力してください。',

  /** 최소값 오류 - "2자 이상 입력하세요" */
  KEYWORD_MINIMUM_LENGTH: 'タイトルを入力してください（2文字以上）。',

  /** 최대값 오류 - "30자 이내로 입력하세요" */
  KEYWORD_MAX_LENGTH: '30文字以内で入力してください',

  /** 제목 최대값 오류 - "100자 이내로 입력하세요" */
  TITLE_MAX_LENGTH: '100文字以内で入力してください',

  /** 내용 최대값 오류 - "2,000자 이내로 입력하세요" */
  CONTENTS_MAX_LENGTH: '2,000文字以内で入力してください',

  /** 소수점 오류 - "소수점 이하 1자리까지만 허용됩니다." */
  DECIMAL_POINT_CANNOT_EXCEED: '小数点以下1桁までしか許されません。',

  /** 숫자 최대값 오류 - "저장할 수 있는 크기를 초과했습니다." */
  SAVE_SIZE_OVERFLOW: '保存できるサイズを超えました。',

  /** 최대 선택 오류 메세지 - "지붕재는 최대 2개까지 선택할 수 있습니다." */
  ROOF_MATERIAL_MAX_SELECT: '屋根材は最大2個まで選択できます。',

  /** 임시 저장 제출 오류 - "임시 저장된 데이터는 제출할 수 없습니다." */
  TEMP_CANNOT_SUBMIT: '一時保存されたデータは提出できません。',
}

/**
 * @description 에러 메세지 상수 객체
 * - 입력 오류 경고 메세지
 * - 결과 실패 메세지
 * - 서버 에러 메세지
 */
export const ERROR_MESSAGE = {
  /** 결과 실패 메세지 */
  /** PDF 생성 오류 - "PDF 생성에 실패했습니다." */
  PDF_GENERATION_ERROR: 'PDF 生成に失敗しました。',

  /** 이메일 전송 오류 - "이메일 전송에 실패했습니다. 다시 시도해주세요." */
  EMAIL_SEND_ERROR: 'メール送信に失敗しました。 再度送信してください。',

  /** 서버 에러 메세지 */
  /** 데이터를 찾을 수 없습니다. - 404 */
  NOT_FOUND: 'データが見つかりません。',

  /** 승인되지 않았습니다. - 401 */
  UNAUTHORIZED: '承認されていません。',

  /** 권한이 없습니다. - 403 */
  FORBIDDEN: '権限がありません。',

  /** 데이터의 조회에 실패했습니다. - 500 */
  FETCH_ERROR: 'データの取得に失敗しました。',

  /** 서버 에러 - "일시적인 오류가 발생했습니다. 계속되는 경우 관리자에게 문의하시기 바랍니다." - 500 */
  SERVER_ERROR: '一時的なエラーが発生しました。 継続的な場合は、管理者に連絡してください。',

  /** 잘못된 요청입니다. - 400 */
  BAD_REQUEST: '間違ったリクエストです。',

  /** 데이터베이스 오류가 발생했습니다. - 500 */
  PRISMA_ERROR: 'データベース エラーが発生しました。',
}

export function useAlertMsg(): {
  showErrorAlert: (message: string, requiredField?: string) => void
  showConfirm: (message: string, onConfirm: () => void, onCancel?: () => void) => void
  showSuccessAlert: (message: string) => void
} {
  const showErrorAlert = (message: string, requiredField?: string) => {
    if (message.trim() === '' || message === null || message === undefined) return
    if (message.length > 100) {
      alert(ERROR_MESSAGE.SERVER_ERROR)
      return
    }
    requiredField ? alert(`${requiredField} ${message}`) : alert(message)
  }

  const showConfirm = (message: string, onConfirm: () => void, onCancel?: () => void) => {
    window.neoConfirm(message, onConfirm, onCancel)
  }

  const showSuccessAlert = (message: string) => {
    alert(message)
  }

  return {
    showErrorAlert,
    showConfirm,
    showSuccessAlert,
  }
}
