$(document).ready(function () {
    var prodApiModule = prodListService.apiModule();
    var prodViewModule = prodListService.viewModule();

    // query string 으로 들어온 검색 조건 최초 설정 호출
    initSearchParams();
    // 최초 요청
    callProdListApiRequest();

    // query string 으로 들어온 검색 조건 최초 설정
    function initSearchParams() {
        // searchText 설정
        var searchText = $('#searchText').val();
        $('#searchByTextInput').val(searchText);
        $('#mSearchByTextInput').val(searchText);
        prodApiModule.setSearchText(searchText);

        // 제품제형 설정
        settingArrayQueryParams("mProdTy", "prodTy")
        // 피부타입 설정
        var mSkTyCus;
        var mSkTy;
        if ($("#mSkTyCus").val() != "") {
            mSkTyCus = $("#mSkTyCus").val();
            mSkTy = $('#mSkTy').val();
        } else if ($('#userSkTy').val() != "") {
            mSkTyCus = "Y";
            mSkTy = $('#userSkTy').val();
        } else {
            mSkTyCus = "N";
            mSkTy = $('#mSkTy').val();
        }
        prodApiModule.setSkTyCus(mSkTyCus);
        prodApiModule.setSkTy(mSkTy);
        // 정렬기준 설정
        var sortToken = $('#sortToken').val();

        switch (sortToken) {
            case "new":
                prodApiModule.setSortToken(sortToken);
                prodApiModule.setSort("REG_DT", "DESC");
                setActiveSortButton(sortToken);
                setMobileSortSelect(sortToken);
                break;
            case "chp":
                prodApiModule.setSortToken(sortToken);
                prodApiModule.setSort("PROD_PRC", "ASC");
                setActiveSortButton(sortToken);
                setMobileSortSelect(sortToken);
                break;
            case "exp":
                prodApiModule.setSortToken(sortToken);
                prodApiModule.setSort("PROD_PRC", "DESC");
                setActiveSortButton(sortToken);
                setMobileSortSelect(sortToken);
                break;
            case "may":
                prodApiModule.setSortToken(sortToken);
                prodApiModule.setSort("RCMD_NO", "DESC");
                setActiveSortButton(sortToken);
                setMobileSortSelect(sortToken);
                break;
            default:
                prodApiModule.setSortToken("new");
                prodApiModule.setSort("REG_DT", "DESC");
                setActiveSortButton("new");
                setMobileSortSelect(sortToken);
                break;
        }

        // 새로고침시 query string에서 mSideBar 파라메터 제거
        history.pushState({}, null, _.replace(window.location.href, '&mSideBar=on', ''));

        // 모바일 사이드 바의 on/off 설정
        var mSideBar = $('#mSideBar').val();
        if (mSideBar === 'on') {
            $('.sidebar__menu').addClass('active');
            $('.m__filterbtn_black').addClass('active');
            prodApiModule.setMsideBarToOn();
        } else {
            $('.sidebar__menu').removeClass('active');
            $('.m__filterbtn_black').removeClass('active');
            prodApiModule.setMsideBarToOff();
        }

        // mInputName: 쿼리 스트링 값을 저장한 inputName
        // inputName: 화면에 표시되는 inputName
        function settingArrayQueryParams(mInputName, inputName) {
            var $selectedInputArray = $("input[name='" + mInputName + "']");
            var targetArray = [];
            for (var i = 0; i < $selectedInputArray.length; i++) {
                targetArray.push($selectedInputArray[i].value);
            }
            switch (mInputName) {
                case 'mProdTy' :
                    prodApiModule.setProdTyArray(targetArray);
                    break;
            }
            for (var i = 0; i < targetArray.length; i++) {
                var selector = "input[name='" + inputName + "'][value='" + targetArray[i] + "']";
                $(selector).prop('checked', true);
            }
        }

        // 데스크탑 화면의 정렬 버튼 활성화
        function setActiveSortButton(sortToken) {
            $(".filter__new").removeClass("active");
            $(".filter__chp").removeClass("active");
            $(".filter__exp").removeClass("active");
            $(".filter__may").removeClass("active");
            $(".filter__" + sortToken).addClass("active");
        }

        // 모바일화면의 정렬 select input 값 설정
        function setMobileSortSelect(sortToken) {
            switch (sortToken) {
                case 'new':
                    $('#m__filterbar__filter').val(sortToken);
                    break;
                case 'chp':
                    $('#m__filterbar__filter').val(sortToken);
                    break;
                case 'exp':
                    $('#m__filterbar__filter').val(sortToken);
                    break;
                case 'may':
                    $('#m__filterbar__filter').val(sortToken);
                    break;
                default:
                    $('#m__filterbar__filter').val("new");
                    break;
            }
        }
    }

    // 카테고리 클릭 이벤트
    $("input[name='categoryTy']").click(function () {
        $(this).prop('checked', false);
        alert("제품 카테고리 분류 기능은 아직 제공하지 않습니다.");
    });
    // 전체 체크박스 이벤트 함수
    $("#prodTy_all").click(function () {
        if ($("#prodTy_all").is(":checked")) {
            $("input[name=prodTy]").prop("checked", false);
            prodApiModule.setProdTyArray(null);
            prodApiModule.prodListPageRequest();
        }
    });
    $("#skTy_all").click(function () {
        if ($("#skTy_all").is(":checked")) {
            $("input[name=skTy]").prop("checked", false);
            prodApiModule.setSkTy(null);
            prodApiModule.prodListPageRequest();
        }
    });
    // 제품제형 클릭 이벤트
    $("input[name='prodTy']").click(function () {
        var $prodTyInputArray = $("input[name='prodTy']:checked");
        var prodTyArray = [];
        for (var i = 0; i < $prodTyInputArray.length; i++) {
            var $prodTyInput = $prodTyInputArray[i];
            prodTyArray.push($prodTyInput.value);
        }
        prodApiModule.setProdTyArray(prodTyArray);
        prodApiModule.prodListPageRequest();
    });
    // 피부타입 클릭 이벤트
    $("input[name='skTyCus']").click(function () {
        var skTyCus = $("input[name='skTyCus']:checked");
        if (skTyCus.val() == 'Y') {
            $("#skTyAllList").hide();
            prodApiModule.setSkTyCus("Y");
            prodApiModule.setSkTy($("#userSkTy").val());
            prodApiModule.prodListPageRequest();
        }
        if (skTyCus.val() == "N") {
            $("#skTyAllList").show();
            prodApiModule.setSkTyCus("N");
        }
    });
    $("input[name='skTy']").click(function () {
        var skTy = $("input[name='skTy']:checked");
        prodApiModule.setSkTy(skTy[0].value);
        prodApiModule.setSkTyCus("N");
        prodApiModule.prodListPageRequest();
    });
    // 최신순 클릭 이벤트
    $('.filter__new').click(function () {
        prodApiModule.setSortToken("new");
        prodApiModule.prodListPageRequest();
    })
    // 낮은가격순 클릭 이벤트
    $('.filter__chp').click(function () {
        prodApiModule.setSortToken("chp");
        prodApiModule.prodListPageRequest();
    })
    // 높은 가격순 클릭 이벤트
    $('.filter__exp').click(function () {
        prodApiModule.setSortToken("exp");
        prodApiModule.prodListPageRequest();
    })
    // 인기순 클릭 이벤트
    $('.filter__may').click(function () {
        prodApiModule.setSortToken("may");
        prodApiModule.prodListPageRequest();
    })
    // more btn 이벤트
    $('#moreBtn').click(function () {
        callProdListApiRequest();
    });
    // 검색 버튼 이벤트
    $('#searchByTextButton').click(function () {
        $('#skTy_all').prop('checked', true);
        $("input[name=skTy]").prop("checked", false);
        $("input:radio[name='skTyCus']:radio[value='N']").prop('checked', true);
        prodApiModule.setSkTy(null);
        prodApiModule.setSkTyCus("N");
        prodApiModule.setSearchText($('#searchByTextInput').val());
        prodApiModule.prodListPageRequest();
    });
    // 검색바에서 엔터 키 눌렀을때 검색버튼 클릭 처리
    $('#searchByTextInput').keypress(function (e) {
        var key = e.which;
        if (key === 13) {
            $('#searchByTextButton').click();
            return false;
        }
    });
    // 모바일 화면에서 검색 버튼 이벤트
    $('#mSearchByTextButton').click(function () {
        $('#skTy_all').prop('checked', true);
        $("input[name=skTy]").prop("checked", false);
        $("input:radio[name='skTyCus']:radio[value='N']").prop('checked', true);
        prodApiModule.setSkTy(null);
        prodApiModule.setSkTyCus("N");
        prodApiModule.setSearchText($('#mSearchByTextInput').val());
        prodApiModule.prodListPageRequest();
    });
    // 모바일 화면 검색바에서 엔터 키 눌렀을때 검색버튼 클릭 처리
    $('#mSearchByTextInput').keypress(function (e) {
        var key = e.which;
        if (key === 13) {
            $('#mSearchByTextButton').click();
            return false;
        }
    });
    // 모바일화면에서 검색카테고리 버튼 클릭 이벤트
    $('.m__filterbtn').click(function () {
        sidebarHeightResize();
    });

    // 모바일화면에서 검색카테고리 블라인트 영역 클릭 이벤트
    $('.m__filterbtn_black').click(function () {
        prodApiModule.setMsideBarToOff();
    });

    function sidebarHeightResize() {
        if ($('.sidebar__menu').hasClass('active')) {
            prodApiModule.setMsideBarToOn();
        } else {
            prodApiModule.setMsideBarToOff();
        }
    }

    // 모바일화면에서 정렬 버튼 변경 이벤트
    $('#m__filterbar__filter').change(function () {
        var mSort = $('#m__filterbar__filter option:selected').val();
        prodApiModule.setSortToken(mSort);
        prodApiModule.prodListPageRequest();
    });

    // 좋아요 버튼을 클릭하면 발생하는 이벤트 처리
    $('#prodCardRoot').on('click', '.like__icon', function (e) {
        // 제품 상세로 넘어가지 않도록 처리
        e.preventDefault();
        if (!prodLikeService.canLike()) {
            return;
        }

        var prodId = $(this).attr('data-prodId');
        var prod = prodListService.findProdListByProdId(prodId);
        var option = {
            scb: function () {
                prodListService.toggleLike(prod);
                prodViewModule.drawLikeView($('#' + prod.likeRootId), prod);
            },
            ecb: function (res) {
                alert(res.message);
            }
        }
        prodLikeService.prodLikeApiRequest(prod, option);
    });

    // 서버로부터 화장품 리스트 데이터를 받아오는 함수
    function callProdListApiRequest() {
        prodApiModule.prodListApiRequest({
            scb: function (res) {
                var $prodCardRoot = $("#prodCardRoot");
                var $moreBtn = $("#moreBtn");

                if (prodApiModule.isProdListZero()) {
                    prodViewModule.prodListMoreBtnHidden($moreBtn);
                    prodViewModule.appendProdListZeroAlert($prodCardRoot);
                } else {
                    // 화면에 화장품 목록 출력
                    prodViewModule.appendProdList($prodCardRoot, res.prodList);

                    if (prodApiModule.isExistNextPaging()) {
                        prodViewModule.prodListMoreBtnShow($moreBtn);
                    } else {
                        prodViewModule.prodListMoreBtnHidden($moreBtn);
                    }
                }
                if ($("#mSkTyCus").val() == 'N') {
                    $("#skTyAllList").show();
                }
                sidebarHeightResize();
            },
            ecb: function (res) {
                alert(res.message);
            }
        });
    }

});

