import { DeviceType } from '@ucap-webmessenger/core';
import {
  APIRequest,
  APIResponse,
  APIEncoder,
  APIDecoder,
  ParameterUtil
} from '@ucap-webmessenger/api';
import { WebLinkType } from '@ucap-webmessenger/daesang';

export interface UrlInfoRequest extends APIRequest {
  deviceType: DeviceType;
  loginId?: string;
}

export interface UrlInfoResponse extends APIResponse {
  portCheckUrl?: string;
  messageUrl?: string;
  messageUrl2?: string;
  passwordUrl?: string;
  planUrl?: string;
  planUrl2?: string;
  vocUrl?: string;
  confUrl?: string;
  uprApiUrl?: string;
  uprSvcUrl?: string;
  uprDownloadUrl?: string;
  synapViewUrl?: string;
}

export interface DaesangUrlInfoResponse extends UrlInfoResponse {
  webLink: WebLink[];
  webLinkAllowedList: string[];
}
export interface WebLink {
  key: string;
  title: string;
  url: string;
}

const urlInfoEncodeMap = {
  deviceType: 'p_device_type',
  loginId: 'p_user_id'
};

export const encodeUrlInfo: APIEncoder<UrlInfoRequest> = (
  req: UrlInfoRequest
) => {
  return ParameterUtil.encode(urlInfoEncodeMap, req);
};

export const decodeUrlInfo: APIDecoder<UrlInfoResponse> = (res: any) => {
  return {
    statusCode: res.StatusCode,
    errorMessage: res.ErrorMessage,
    portCheckUrl: res.PortCheckURL,
    messageUrl: res.MsgURL,
    messageUrl2: res.MsgURL2,
    passwordUrl: res.PasswordURL,
    planUrl: res.PlanURL,
    planUrl2: res.PlanURL2,
    vocUrl: res.VocURL,
    confUrl: res.ConfURL,
    uprApiUrl: res.UprApiURL,
    uprSvcUrl: res.UprSvcURL,
    uprDownloadUrl: res.UprDownloadURL,
    synapViewUrl: res.SynapViewURL
  } as UrlInfoResponse;
};
export const decodeUrlInfoDaesang: APIDecoder<DaesangUrlInfoResponse> = (
  res: any
) => {
  const webLink: WebLink[] = [];

  if (!!res.WebLinkWebhard) {
    const arr = res.WebLinkWebhard.split(',');
    webLink.push({
      key: WebLinkType.Webhard,
      title: arr.length > 1 ? arr[0] : '',
      url: arr.length > 1 ? arr[1] : arr[0]
    });
  }
  if (!!res.WebLinkDsp) {
    const arr = res.WebLinkDsp.split(',');
    webLink.push({
      key: WebLinkType.Dsp,
      title: arr.length > 1 ? arr[0] : '',
      url: arr.length > 1 ? arr[1] : arr[0]
    });
  }
  if (!!res.WebLinkSms) {
    const arr = res.WebLinkSms.split(',');
    webLink.push({
      key: WebLinkType.Sms,
      title: arr.length > 1 ? arr[0] : '',
      url: arr.length > 1 ? arr[1] : arr[0]
    });
  }
  if (!!res.WebLinkConf) {
    const arr = res.WebLinkConf.split(',');
    webLink.push({
      key: WebLinkType.Conf,
      title: arr.length > 1 ? arr[0] : '',
      url: arr.length > 1 ? arr[1] : arr[0]
    });
  }
  if (!!res.WebLinkEp) {
    const arr = res.WebLinkEp.split(',');
    webLink.push({
      key: WebLinkType.Ep,
      title: arr.length > 1 ? arr[0] : '',
      url: arr.length > 1 ? arr[1] : arr[0]
    });
  }
  if (!!res.WebLinkSop) {
    const arr = res.WebLinkSop.split(',');
    webLink.push({
      key: WebLinkType.Sop,
      title: arr.length > 1 ? arr[0] : '',
      url: arr.length > 1 ? arr[1] : arr[0]
    });
  }
  if (!!res.WebLinkSom) {
    const arr = res.WebLinkSom.split(',');
    webLink.push({
      key: WebLinkType.Som,
      title: arr.length > 1 ? arr[0] : '',
      url: arr.length > 1 ? arr[1] : arr[0]
    });
  }
  if (!!res.WebLinkElephant) {
    const arr = res.WebLinkElephant.split(',');
    webLink.push({
      key: WebLinkType.Elephant,
      title: arr.length > 1 ? arr[0] : '',
      url: arr.length > 1 ? arr[1] : arr[0]
    });
  }
  if (!!res.WebLinkItsvcdesk) {
    const arr = res.WebLinkItsvcdesk.split(',');
    webLink.push({
      key: WebLinkType.Itsvcdesk,
      title: arr.length > 1 ? arr[0] : '',
      url: arr.length > 1 ? arr[1] : arr[0]
    });
  }
  if (!!res.WebLinkUrgntNews) {
    const arr = res.WebLinkUrgntNews.split(',');
    webLink.push({
      key: WebLinkType.UrgntNews,
      title: arr.length > 1 ? arr[0] : '',
      url: arr.length > 1 ? arr[1] : arr[0]
    });
  }
  if (!!res.WebLinkMailCnt) {
    const arr = res.WebLinkMailCnt.split(',');
    webLink.push({
      key: WebLinkType.MailCnt,
      title: arr.length > 1 ? arr[0] : '',
      url: arr.length > 1 ? arr[1] : arr[0]
    });
  }
  if (!!res.WebLinkMail) {
    const arr = res.WebLinkMail.split(',');
    webLink.push({
      key: WebLinkType.Mail,
      title: arr.length > 1 ? arr[0] : '',
      url: arr.length > 1 ? arr[1] : arr[0]
    });
  }
  if (!!res.WebLinkPaymentCnt) {
    const arr = res.WebLinkPaymentCnt.split(',');
    webLink.push({
      key: WebLinkType.PaymentCnt,
      title: arr.length > 1 ? arr[0] : '',
      url: arr.length > 1 ? arr[1] : arr[0]
    });
  }
  if (!!res.WebLinkPayment) {
    const arr = res.WebLinkPayment.split(',');
    webLink.push({
      key: WebLinkType.Payment,
      title: arr.length > 1 ? arr[0] : '',
      url: arr.length > 1 ? arr[1] : arr[0]
    });
  }
  if (!!res.WebLinkChgPassword) {
    const arr = res.WebLinkChgPassword.split(',');
    webLink.push({
      key: WebLinkType.ChgPassword,
      title: arr.length > 1 ? arr[0] : '',
      url: arr.length > 1 ? arr[1] : arr[0]
    });
  }

  return {
    statusCode: res.StatusCode,
    errorMessage: res.ErrorMessage,
    portCheckUrl: res.PortCheckURL,
    messageUrl: res.MsgURL,
    messageUrl2: res.MsgURL2,
    passwordUrl: res.PasswordURL,
    planUrl: res.PlanURL,
    planUrl2: res.PlanURL2,
    vocUrl: res.VocURL,
    confUrl: res.ConfURL,
    uprApiUrl: res.UprApiURL,
    uprSvcUrl: res.UprSvcURL,
    uprDownloadUrl: res.UprDownloadURL,
    synapViewUrl: res.SynapViewURL,

    webLink,
    webLinkAllowedList: res.WebLinkAllowedList.split(',')
  } as DaesangUrlInfoResponse;
};
