import { useDispatch } from "react-redux";
import { updateHomeInfo } from "../actions/homeActions";
import { pushPanel } from "../actions/panelActions";
import {
  LOG_CONTEXT_NAME,
  LOG_MENU,
  LOG_MESSAGE_ID,
  panel_names,
} from "../utils/Config";
import { SpotlightIds } from "../utils/SpotlightIds";
import { sendLogTotalRecommend } from "../actions/logActions";

//V2_진입경로코드_진입경로명_MT_노출순번
export const handleDeepLink = (contentTarget) => (dispatch, getState) => {
  console.log("[handleDeepLink] ~ contentTarget: ", contentTarget);
  let linkTpCd; // 진입경로코드
  let linkTpNm; // 진입경로명
  let type; // 링크 타입
  let patnrId; // 파트너아이디
  let prdtId; // 상품아이디
  let curationId; // 큐레이션아이디
  let showId; // 방송아이디
  let chanId; // 채널아이디
  let expsOrd; // 노출순번
  let grNumber; // 그룹번호
  let evntId; // 이벤트아이디
  let lgCatCd; // LG카테고리Code
  let lgCatNm; // 서브카테고리명
  let tabType; // 카테고리 탭명

  if (contentTarget === null || contentTarget === undefined) {
    linkTpCd = "1000";
    linkTpNm = LOG_MENU.APP;
  } else {
    const tokens = contentTarget.split("_");
    if (tokens[0] === "V2" || tokens[0] === "V3") {
      linkTpCd = tokens[1];
      linkTpNm = tokens[2];
      type = tokens[3];

      let panelName = "";
      let deeplinkPanel = "";
      let panelInfo = {};

      if (tokens[0] === "V2") {
        panelName = panel_names.HOME_PANEL;
        return;
      }

      if (parseInt(linkTpCd) < 2000 || parseInt(linkTpCd) > 8999) {
        linkTpCd = "9999";
        linkTpNm = LOG_MENU.UNKNOWN;
      }

      switch (type) {
        case "MT":
          // "MT": Main TOP
          // V3_진입경로코드_진입경로명_MT_노출순번
          panelName = panel_names.HOME_PANEL;
          deeplinkPanel = "Main TOP";
          break;

        case "PD":
          // "PD": Product Detail
          // V3_진입경로코드_진입경로명_PD_파트너아이디_상품아이디_노출순번_큐레이션아이디
          patnrId = tokens[4]; // 파트너아이디
          prdtId = tokens[5]; // 상품아이디
          expsOrd = tokens[6]; // 노출순번
          curationId = tokens[7]; // 큐레이션아이디
          panelName = panel_names.DETAIL_PANEL;
          deeplinkPanel = "Product Detaoil";
          panelInfo = {
            patnrId: patnrId,
            prdtId: prdtId,
            // expsOrd: expsOrd,
          };
          break;

        case "LS":
          // "LS": Live Show
          // V3_진입경로코드_진입경로명_LS_파트너아이디_채널아이디_노출순번_큐레이션아이디
          patnrId = tokens[4]; // 파트너아이디
          chanId = tokens[5]; // 채널아이디
          expsOrd = tokens[6]; // 노출순번
          curationId = tokens[7]; // 큐레이션아이디
          panelName = panel_names.PLAYER_PANEL;
          deeplinkPanel = "Live Show";
          panelInfo = {
            patnrId: patnrId,
            chanId: chanId,
            shptmBanrTpNm: "LIVE",
            // expsOrd: expsOrd,
          };
          break;

        case "VS":
          // "VS": VOD Show
          // V3_진입경로코드_진입경로명_VS_파트너아이디_방송아이디_노출순번_큐레이션아이디
          patnrId = tokens[4]; // 파트너아이디
          showId = tokens[5]; // 방송아이디
          expsOrd = tokens[6]; // 노출순번
          curationId = tokens[7]; // 큐레이션아이디
          panelName = panel_names.PLAYER_PANEL;
          deeplinkPanel = "VOD Show";
          panelInfo = {
            patnrId: patnrId,
            showId: showId,
            shptmBanrTpNm: "VOD",
            // expsOrd: expsOrd,
          };
          break;

        case "TD":
          // "TD": Theme Detail
          // V3_진입경로코드_진입경로명_TD_파트너아이디_큐레이션아이디_상품아이디_노출순번_그룹번호
          // 상품아이디 (M): 테마상세 진입시 상품을 포커싱하기 위함
          // 노출순번 (O) : 상품아이디+그룹번호가 설정된 경우 필수 (없을시 "0" 설정)
          // 그룹번호 (O) : TCHH 유형만 적용
          patnrId = tokens[4]; // 파트너아이디
          curationId = tokens[5]; // 큐레이션아이디\
          prdtId = tokens[6]; // 상품아이디
          expsOrd = tokens[7]; // 노출순번
          grNumber = tokens[8]; // 그룹번호
          panelName = panel_names.DETAIL_PANEL;
          deeplinkPanel = "Theme Detail";
          panelInfo = {
            patnrId: patnrId,
            curationId: curationId,
            themePrdtId: prdtId, // 포커스 아이디
            prdtId: prdtId, // 데이터 조회
            grNumber: grNumber,
            type: "theme",
            // expsOrd: expsOrd,
          };
          break;

        case "HD":
          // "HD": Hotel Detail
          // V3_진입경로코드_진입경로명_HD_파트너아이디_큐레이션아이디_노출순번

          patnrId = tokens[4]; // 파트너아이디
          curationId = tokens[5]; // 큐레이션아이디
          expsOrd = tokens[6]; // 노출순번
          panelName = panel_names.DETAIL_PANEL;
          deeplinkPanel = "Hotel Detail";
          panelInfo = {
            patnrId: patnrId,
            curationId: curationId,
            type: "hotel",
            // expsOrd: expsOrd,
          };
          break;

        case "HP":
          // "HP": Hot Picks
          // V3_진입경로코드_진입경로명_HP_파트너아이디_큐레이션아이디_노출순번

          patnrId = tokens[4]; // 파트너아이디
          curationId = tokens[5]; // 큐레이션아이디
          expsOrd = tokens[6]; // 노출순번
          panelName = panel_names.HOT_PICKS_PANEL;
          deeplinkPanel = "Hot Picks";
          panelInfo = {
            patnrId: patnrId,
            curationId: curationId,
            // expsOrd: expsOrd,
          };
          break;

        case "WE":
          // "WE": Welcome Event
          // V3_진입경로코드_진입경로명_WE_이벤트아이디
          evntId = tokens[4]; // 이벤트아이디
          panelName = panel_names.WELCOME_EVENT_PANEL;
          deeplinkPanel = "Welcome Event";
          panelInfo = {
            evntId: evntId,
          };
          break;

        case "OS":
          // "OS": On Sale
          // V3_진입경로코드_진입경로명_OS_LG카테고리Code_서브카테고리명
          lgCatCd = tokens[4]; // LG카테고리Code
          lgCatNm = tokens[5]; // 서브카테고리명
          panelName = panel_names.ON_SALE_PANEL;
          deeplinkPanel = "On Sale";
          panelInfo = {
            lgCatCd: lgCatCd,
            lgCatNm: lgCatNm,
          };
          break;

        case "BS":
          // "BS": Best Sellers
          // V3_진입경로코드_진입경로명_BS
          panelName = panel_names.TRENDING_NOW_PANEL;
          deeplinkPanel = "Best Sellers";
          panelInfo = {
            pageName: "BS",
            focusedContainerId: SpotlightIds.TRENDING_NOW_BEST_SELLER,
          };

          break;

        case "PS":
          // "PS": Popular Shows
          // V3_진입경로코드_진입경로명_PS_노출순번
          panelName = panel_names.TRENDING_NOW_PANEL;
          deeplinkPanel = "Popular Shows";
          panelInfo = {
            pageName: "PS",
            focusedContainerId: SpotlightIds.TRENDING_NOW_POPULAR_SHOW,
          };
          break;

        case "SC":
          // "SC": Sub Category
          // V3_진입경로코드_진입경로명_SC_LG카테고리Code_서브카테고리명_컨텐츠타입
          // * 컨텐츠 타입 : Show / Item
          lgCatCd = tokens[4]; // LG카테고리Code
          lgCatNm = tokens[5]; // 서브카테고리명
          tabType = tokens[6].toLowerCase(); // 컨텐츠타입
          panelName = panel_names.CATEGORY_PANEL;
          deeplinkPanel = "Sub Category";
          panelInfo = {
            lgCatCd: lgCatCd,
            lgCatNm: lgCatNm,
            tab: tabType === "cat00102" ? 0 : 1,
          };
          break;

        case "FB":
          // "FB": Featured Brands
          // V3_진입경로코드_진입경로명_FB_파트너아이디_노출순번
          patnrId = tokens[4]; // 파트너아이디
          panelName = panel_names.FEATURED_BRANDS_PANEL;
          deeplinkPanel = "Featured Brands";
          panelInfo = {
            patnrId: patnrId,
          };
          break;

        case "TM":
          curationId = tokens[4]; // 큐레이션 아이디
          panelName = panel_names.THEME_CURATION_PANEL;
          deeplinkPanel = "THEME MENU";
          panelInfo = {
            curationId: curationId,
          };
          break;

        // case "SR":
        //   patnrId = tokens[4]; // 파트너 아이디
        //   panelName = panel_names.IMAGE_PANEL;
        //   panelInfo = {
        //     patnrId: patnrId,
        //   };
        //   break;
      }

      dispatch(
        sendLogTotalRecommend({
          contextName: LOG_CONTEXT_NAME.ENTRY,
          messageId: LOG_MESSAGE_ID.ENTRY_INFO,
          deeplink: deeplinkPanel,
          curationId: curationId ? curationId : showId,
          productId: prdtId,
          partnerID: patnrId,
          showId: showId,
          channelId: chanId,
          category: lgCatNm,
          linkTypeCode: linkTpCd,
        })
      );

      if (panelName) {
        const action =
          panelName === panel_names.HOME_PANEL ? updateHomeInfo : pushPanel;

        dispatch(
          action({
            name: panelName,
            panelInfo: { ...panelInfo, linkTpCd },
          })
        );
      }
    }
  }
};
