const apiurl = window._x_webapp_staff_start_base_url ? window._x_webapp_staff_start_base_url : 'https://api.staff-start.com';
const urlPathCrdLst = '/v1/coordinate';
const urlPathCrdDtl = '/v1/coordinate/detail';
const urlPathCrdTagRank = '/v2/tags/ranking';
const urlPathStfLst = '/v1/staff/list';
//const urlPathStfLstRank = '/v1/ranking/staffs';
const urlPathStfLstRank = '/v1/staff/list?sort=pv'
const urlPathStfDtl = '/v1/staff/detail';
const urlPathPdtDtl = '/v1/products/detail';
const urlPathBlgLstV1 = '/v1/article';
const urlPathBlgLst = '/v2/articles';
const urlPathBlgDtl = '/v2/articles/detail';
const urlPathShpLst = '/v1/shop';
const urlPathShpDtl = '/v2/shops/detail';
const urlPathBrdLstCrd = '/v1/coordinateLabel';
const urlPathBrdLstStf = '/v1/label';
const urlPathStfRevLst = '/v2/staff-reviews';
const urlPathSuggestTag = '/v2/tags/search';
const urlPathPlayList = '/v2/plays';
const sexTypes = [{no:'1', name:'WOMENS'}, {no:'2', name:'MENS'}, {no:'3', name:'KIDS'}, {no:'4', name:'LIFESTYLE'}];
const urlPathBlgLstNew = '/api/front/v1/articles';
const staffListSexTypes = [{no:'1', name:'WOMENS'}, {no:'2', name:'MENS'}];
const productGenderPramTypes = {
		'001':'001,001-002,001-003,001-004,001-002-003,001-002-004,001-003-004,001-002-003-004',
		'002':'002,001-002,002-003,002-004,001-002-003,001-002-004,002-003-004,001-002-003-004',
		'003':'003,001-003,002-003,003-004,001-002-003,001-003-004,002-003-004,001-002-003-004',
		'004':'004,001-004,002-004,003-004,001-002-004,001-003-004,002-003-004,001-002-003-004'
	};

function getStaffStartData(urlpath,data,cloneBlock){
    jQuery.ajax({
        url: apiurl + urlpath,
        type: 'GET',
        dataType: 'json',
        data: data
    })
    .done(function(json) {
        cloneBlock(json);
        console.log("staff start api success");
    })
    .fail(function(json) {
        console.log("staff start api error");
    });
}

function getStaffStartDataDeffered(urlpath,data,cloneBlock){
	var deferred = new jQuery.Deferred();
	
	jQuery.ajax({
		url: apiurl + urlpath,
		type: 'GET',
		dataType: 'json',
		data: data
	})
	.done(function(json) {
		cloneBlock(json);
		console.log("staff start api success");
	})
	.fail(function(json) {
		console.log("staff start api error");
	})
	.always(function(){
		 deferred.resolve();
	});
	
	return deferred;
}

function getStaffStartDataWithFavoriteStatus(urlPath, data, encMemNo, cookie, favEndpoint, favApiReq, cloneBlock) {
    var ssJson;
    getStaffStartDataDeffered(urlPath, data, (res) => { ssJson = res; }).then(() => {
        if (!encMemNo) {
            const favCidSet = new Set(cookie ?? []);
            for (const item of ssJson.item) {
                item.favorite = favCidSet.has(item.cid);
            }
            cloneBlock(ssJson);
        } else if (ssJson && ssJson.item && ssJson.item.length > 0) {
            const rootPath = window._x_webapp_root ? window._x_webapp_root : '/';
            const asyncFavUrl = rootPath + favEndpoint;
            jQuery.ajax({
                headers: headers,
                type: 'POST',
                url: asyncFavUrl,
                dataType: 'json',
                data: favApiReq(ssJson)
            }).done(function(json) {
                const favCidSet = new Set(json.favcids);
                for (const item of ssJson.item) {
                    item.favorite = favCidSet.has(item.cid);
                }
            }).always(function(json) {
                cloneBlock(ssJson);
            });
        } else {
            cloneBlock(ssJson);
        }
    });
}

function setApiData(data, key, val) {
    if (val) data[key] = val;
}

//---------------------------------------------
//ページング
//（全件数、1ページあたりの表示件数、ページリンク表示数、中心は何番目か）
//---------------------------------------------
function listPaging(totalCnt,dispCnt,pageLinkCnt,pageLinkHalf) {
  var base_page = jQuery('p.pager_number');
  
  var currentPage = getParamVal('p');                //現在のページ
  if (!currentPage) currentPage = 1;
  currentPage = Number(currentPage);
  var totalPageCnt = Math.floor(totalCnt / dispCnt); //合計ページ数
  if (totalCnt % dispCnt > 0) totalPageCnt = totalPageCnt + 1;
  
  var pageSeqFirst = 0;                           //表示する番号の最初のページ番号
  var pageSeqLast = 0;                            //表示する番号の最後のページ番号
  //最初のページ番号の設定
  if (totalPageCnt >= pageLinkCnt && ((totalPageCnt - currentPage) < (Math.floor(pageLinkCnt / 2)+1))) {
      pageSeqFirst = totalPageCnt - (pageLinkCnt-1);
  } else {
      if (( currentPage - pageLinkHalf) < 1) {
          pageSeqFirst = 1
      } else {
          pageSeqFirst = currentPage - (pageLinkHalf-1);
      }
  }
  //最後のページ番号の設定
  if ((pageSeqFirst + (pageLinkCnt-1)) > totalPageCnt) {
      pageSeqLast = totalPageCnt;
  }else {
      pageSeqLast = pageSeqFirst + (pageLinkCnt-1);
  }
  
  //ページング描画
  //1ページ目以外は＜を表示
  if (currentPage != '1') {
      base_page.append('<a class="arrow_l" href="' + trimAndAddParam(['p'],'p=' + (currentPage - 1)) + '"><span class="number_l"></span></a>');
  }
  //連番ページ番号
  for (var i=pageSeqFirst  ; i < pageSeqLast + 1; i++ ) {
      if (i==pageSeqFirst && pageSeqFirst > 1) {
          base_page.append('<a href="' + trimAndAddParam(['p'],'p=1') + '"><span style="margin-right: 3px">1</span><span class="first">...</span></a>');
      }
      if (i == currentPage) {
          base_page.append('<a class="on" href="' + trimAndAddParam(['p'],'p=' + i) + '">' + i + '</a>');
      } else {
          base_page.append('<a href="' + trimAndAddParam(['p'],'p=' + i) + '">' + i + '</a>');
      }
      if (i==pageSeqLast && currentPage < totalPageCnt && totalPageCnt > pageSeqLast){
          base_page.append('<a href="' + trimAndAddParam(['p'],'p=' + totalPageCnt) + '"><span class="last">...</span><span style="margin-left: 3px">'+ totalPageCnt +'</span></a>');
      }
  }
  //最後のページ以外は＞を表示
  if (currentPage != pageSeqLast) {
      base_page.append('<a class="arrow_r" href="' + trimAndAddParam(['p'],'p=' + (currentPage + 1)) + '"><span class="number_r"></span></a>');
  }
}

//---------------------------------------------
//ページング(ページタグ外部指定版)
//（全件数、1ページあたりの表示件数、ページリンク表示数、中心は何番目か）
//---------------------------------------------
function listPagingBase(totalCnt,dispCnt,pageLinkCnt,pageLinkHalf, base_page) {

var currentPage = getParamVal('p');                //現在のページ
if (!currentPage) currentPage = 1;
currentPage = Number(currentPage);
var totalPageCnt = Math.floor(totalCnt / dispCnt); //合計ページ数
if (totalCnt % dispCnt > 0) totalPageCnt = totalPageCnt + 1;

var pageSeqFirst = 0;                           //表示する番号の最初のページ番号
var pageSeqLast = 0;                            //表示する番号の最後のページ番号
//最初のページ番号の設定
if (totalPageCnt >= pageLinkCnt && ((totalPageCnt - currentPage) < (Math.floor(pageLinkCnt / 2)+1))) {
    pageSeqFirst = totalPageCnt - (pageLinkCnt-1);
} else {
    if (( currentPage - pageLinkHalf) < 1) {
        pageSeqFirst = 1
    } else {
        pageSeqFirst = currentPage - (pageLinkHalf-1);
    }
}
//最後のページ番号の設定
if ((pageSeqFirst + (pageLinkCnt-1)) > totalPageCnt) {
    pageSeqLast = totalPageCnt;
}else {
    pageSeqLast = pageSeqFirst + (pageLinkCnt-1);
}

//ページング描画
//1ページ目以外は＜を表示
if (currentPage != '1') {
    base_page.append('<a class="arrow_l" href="' + trimAndAddParam(['p'],'p=' + (currentPage - 1)) + '"><span class="number_l"></span></a>');
}
//連番ページ番号
for (var i=pageSeqFirst  ; i < pageSeqLast + 1; i++ ) {
    if (i==pageSeqFirst && pageSeqFirst > 1) {
        base_page.append('<a href="' + trimAndAddParam(['p'],'p=1') + '"><span style="margin-right: 3px">1</span><span class="first">...</span></a>');
    }
    if (i == currentPage) {
        base_page.append('<a class="on" href="' + trimAndAddParam(['p'],'p=' + i) + '">' + i + '</a>');
    } else {
        base_page.append('<a href="' + trimAndAddParam(['p'],'p=' + i) + '">' + i + '</a>');
    }
    if (i==pageSeqLast && currentPage < totalPageCnt && totalPageCnt > pageSeqLast){
        base_page.append('<a href="' + trimAndAddParam(['p'],'p=' + totalPageCnt) + '"><span class="last">...</span><span style="margin-left: 3px">'+ totalPageCnt +'</span></a>');
    }
}
//最後のページ以外は＞を表示
if (currentPage != pageSeqLast) {
    base_page.append('<a class="arrow_r" href="' + trimAndAddParam(['p'],'p=' + (currentPage + 1)) + '"><span class="number_r"></span></a>');
}
}

function isNewItem(item){
  var day_from = new Date();
  var day_to   = new Date(item['accept_at']);

  // 経過時間をミリ秒で取得
  // ミリ秒を日付に変換(端数切捨て)
  var ms = day_from.getTime() - day_to.getTime();
  var days = Math.floor(ms / (1000*60*60*24));
  
  if(days < 30){
      return true;
  }else{
      return false;
  }
}

function convTypeToGenderForStaff(type) {
	var gender = '';
    switch (type){
    case '':
        break;
    case '1':
        gender = '2';
        break;
    case '2':
        gender = '1';
        break;
    case '3':
        gender = '003';
        break;
    case '4':
        gender = '004';
        break;
    default:
    	gender = '999';
    }
    return gender;
}

//指定されたパラメータを除いたパラメータを返す
//除いた結果、パラメータがない場合は空を返す
function trimParamMulti(targetPrams){
    var urlParam = location.search.substring(1);
    var ret = ''; 
    
    if(urlParam) {
        var params = urlParam.split('&');
        var isFirst = true;
     
        for (let i in params) {
        	var isInclude = false;
            var paramItem = params[i].split('=');
            for (let j in targetPrams) {
                if (paramItem[0] == targetPrams[j]) {
                	isInclude = true;
                }
            }
            if (!isInclude) {
            	if(isFirst){
                    isFirst=false;
                    ret = '?'+ params[i];
                }else{
                    ret += '&'+ params[i];
                }
            }
        }
    }
    return ret;
}

//指定されたパラメータを除いた上で指定のパラメータを追加する
function trimAndAddParam(trimParams, addParam){
    var params = trimParamMulti(trimParams);
    
    if(params == ''){
        return '?' + addParam;
    }else{
        return params += '&'+ addParam;
    }
}

//対象のパラメータが存在した場合は値を取得する処理(取得できなければ空を返す)
function getParamVal(id){
    var urlParam = location.search.substring(1);
    var ret = '?'; 
    
    if(urlParam) {
        var params = urlParam.split('&');
        for (i = 0; i < params.length; i++) {
            var paramItem = params[i].split('=');
            if (paramItem[0] == id) {
                return paramItem[1];
            }
        }
    }
    return '';          
}

//セレクトボックスのページ遷移制御
function moveLink(obj){
    index = obj.selectedIndex;
    href = obj.options[index].value;
    location.href = href;
}

function getHeightLink(numHeight, searchHeightMap){
	var searchHeights = Object.keys(searchHeightMap);
	var from_height = 185;
    var to_height = 0;
    var heightLink = '';
    
    for (var i = 0; i < searchHeights.length; i++) {
        // 数値を切り出し、対象数値が範囲内かチェックする
        nos = searchHeightMap[searchHeights[i]].cdDtlNo.split('_');
        if(nos[0] <= numHeight && numHeight < nos[1]){
            from_height = nos[0];
            to_height = nos[1];
            break;
        }
    }
    
    heightLink = 'from_height=' +from_height +'&to_height='+to_height;
    if (to_height == 96){
        heightLink = 'to_height='+to_height;
    }
    if (to_height == 0){
        heightLink = 'from_height=' +from_height;
    }
    return heightLink;
}

function getItemInfo(shopItemCd, shopSkuCd, cloneItem){
    var rootPath = window._x_webapp_root ? window._x_webapp_root : '/';
    var url = rootPath + "addons/staff/iteminfo-J/";

    var headers = {};
    if (document.cookie) {
        var cookies = document.cookie.split(";");
        for (var i = 0; i < cookies.length; i++) {
            var str = cookies[i].split("=");
            if (str[0].trim() == window._x_webapp_xsrf_token) {
                headers['X-XSRF-TOKEN'] = unescape(str[1]);
                break;
            }
        }
    }

    jQuery.ajax({
        type : "GET",
        url : url,
        headers : headers,
        data : {
            "shopItemCd" : shopItemCd,
            "shopSkuCd" : shopSkuCd
        }
    })
    .done(function(json) {
        cloneItem(json);
    })
}

function isExistSexType(typeParam) {
    var typeList = sexTypes;
    for (var i = 0; i < typeList.length; i++) {
        var typeNo = typeList[i].no;
        if(typeNo == typeParam){
        	return true;
        }
    }
    return false;	
}

function conversionProductGenderPram(typeParam) {
	var productGenderPram = '';
	if (typeParam) {
		productGenderPram = productGenderPramTypes[typeParam];
		if (!productGenderPram) {
			productGenderPram = '';
		}
	}
	return productGenderPram;
}

function getItemInfoBySearchEngine(product, shopItemCd, shopSkuCd, base, cloneItem){
    var rootPath = window._x_webapp_root ? window._x_webapp_root : '/';
    var url = rootPath + "addons/staff/iteminfo-J/";

    var headers = {};
    if (document.cookie) {
        var cookies = document.cookie.split(";");
        for (var i = 0; i < cookies.length; i++) {
            var str = cookies[i].split("=");
            if (str[0].trim() == window._x_webapp_xsrf_token) {
                headers['X-XSRF-TOKEN'] = unescape(str[1]);
                break;
            }
        }
    }

    jQuery.ajax({
        type : "GET",
        url : url,
        headers : headers,
        data : {
            "shopItemCd" : shopItemCd,
            "shopSkuCd" : shopSkuCd
        }
    })
    .done(function(json) {
    	cloneItem(product, base, json);
    	console.log("staff start api success");
    })
    .fail(function(json) {
        console.log("staff start api error");
    });
}