
//Kiểm tra cú pháp Email
function validateEmail(Email) {
  var regaxEmail =
    /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
  if (regaxEmail.test(Email)) {
    return true;
  } else {
    return false;
  }
}

 function check_field(){
        var number_regex1 = /^[0]\d{9}$/i;
        var number_regex2 = /^[0]\d{10}$/i;
        var error = "";

        var check_name = document.getElementById('buyer_name').value;
        if(check_name.length < 4) error += "- Tên quá ngắn\n";
        else if(check_name.indexOf('<script') > -1) { 
            error += "- Họ tên chứa các ký tự không hợp lệ, bạn vui lòng kiểm tra lại\n";
        }

        var check_email = document.getElementById('buyer_email').value;
        if(check_email.length < 4) {
            error += "- Bạn chưa nhập email\n";
        }   
        if(check_email.length > 4){
            if(validateEmail(check_email)==false) error += "- Email không hợp lệ\n";
        }

        var check_add = document.getElementById('buyer_address').value;
        if(check_add.length < 5) error += "- Địa chỉ quá ngắn\n";
        else if(check_add.indexOf('<script') > -1) { 
            error += "- Địa chỉ chứa các ký tự không hợp lệ, bạn vui lòng kiểm tra lại\n";
        }

        var check_tel = document.getElementById('buyer_tel').value;
        if(check_tel.length < 4) error += "- Bạn chưa nhập SĐT\n";
        else{
            if(number_regex1.test(check_tel) == false && number_regex2.test(check_tel) == false) error += "- Số điện thoại chưa chính xác\n";
        }

        var check_note = document.getElementById('buyer_note').value;
        if(check_note.indexOf('<script') > -1) { 
            error += "- Ghi chú chứa các ký tự không hợp lệ, bạn vui lòng kiểm tra lại\n";
        }

        var check_province = document.getElementById('buyer_province').value;
        if(check_province==0) error += "- Bạn chưa chọn Tỉnh/Thành phố\n";
        else if(check_province.indexOf('<script') > -1) { 
            error += "- Tỉnh/Thành phố chứa các ký tự không hợp lệ, bạn vui lòng kiểm tra lại\n";
        }

        var check_district = document.getElementById('js-district-holder').value;
        if(check_district==0) error += "- Bạn chưa chọn Quận/Huyện\n";
        else if(check_district.indexOf('<script') > -1) { 
            error += "- Quận/Huyện phố chứa các ký tự không hợp lệ, bạn vui lòng kiểm tra lại\n";
        }

        if(error != "") {
            alert(error); return false;
        }
        if (check_district > 0 && check_add.length > 5) {
            var district = $('#js-district-holder option:selected').text();
            $('#buyer_address').val(check_add +', '+ district)
        }        

        $(".js-send-cart").css("pointer-events","none");
        $(".js-send-cart").html("ĐANG XỬ LÝ...");
        return true;
    }


// check input validation section
function check_valid_input(pattern, target) {
  // check valid value for input in cart page
  $(target).on("input", function () {
    var stringValue = $(target).val();
    var status = pattern.test(stringValue);
    if (status == false) {
      $(this).css("outline-color", "rgb(194 29 29)"); //red
      var targetName = $(this).prev().html().replace("*", "");
      this.setCustomValidity(targetName + " quá ngắn/chưa đúng");
      this.reportValidity();
    } else {
      this.setCustomValidity("");
      this.reportValidity();
      $(this).css("outline-color", "rgb(45 182 99)"); //green
    }
  });
  return;
}
//for mail
function check_valid_input_executer() {
  // add check func for each input here and call this func to check all input
  //for mail
  check_valid_input(
    /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
    "#buyer_email"
  );
  //for name
  check_valid_input(/^[a-zA-Z ]{4,20}$/, "#buyer_name");
  //for phone number
  check_valid_input(/(84|0[3|5|7|8|9])+([0-9]{8})\b/, "#buyer_tel");
  //for address
  check_valid_input(/.{10}/, "#buyer_address");
}

// end check input validation section

//Get province selection ( lay quan huyen )
  function getProvince(province_id) {
    var params = {
    action_type: 'district-list',
    province: province_id
    };
    var target = '#js-district-holder';

    Hura.Ajax.get("province", params).then(function (data) {
    //console.log(data);
    // productTpl is in template: javascript/tpl
    var html = Hura.Template.parse(provinceTpl, data);
    Hura.Template.render(target, '<select name="user_info[district]" id="ship_to_district"><option value="0">Quận/Huyện</option>' + html +'</select>');
    })
  }

  $(".js-bank-money").click(function(){
   $("#show-info-bank").addClass("hide");
  });

  $(".js-bank-online").click(function(){
   $("#show-info-bank").removeClass("hide");
  });

var TOTAL_CART_VALUE_NODE = ".js-total-cart-price";

function formatCurrency(a) {
  var b = parseFloat(a)
    .toFixed(2)
    .replace(/(\d)(?=(\d{3})+\.)/g, "$1.")
    .toString();
  var len = b.length;
  b = b.substring(0, len - 3);
  return b;
}

function strToNumber(str) {
  str += "";
  while (str.indexOf(".") > 0) {
    str = str.replace(".", "");
  }
  var result = parseFloat(str);
  return isNaN(result) ? 0 : result;
}

function tinhSoLuongSanPham() {
  var total_item = 0;

  $(".js-buy-quantity").each(function () {
    total_item += parseInt($(this).val());
  });
  $("#js-total-quantity").html(total_item + " sản phẩm");
}

function checkTotalShippingFee(){
    var province = $("#id-province").val();
    var district = $("#id-distric").val();
   
    var cart_total_before_fee_discount = $("#js-total-before-fee-discount").val();
    
  
    if(province==0 || district == 0){
      return;
    }
  
    var params = {
        action : "shipping",
        action_type: "get-shipping-and-cod",
        order_value : cart_total_before_fee_discount,
        province : province,
        district : district
    }
  
    Hura.Ajax.post('shipping',params).then(function(data){
        //console.log(data)
        $('#js_price_ship').val(data.ship)
        calculateCartTotalPrice()
    })
  
}  
  
  
//tinh tong gia don hang
function calculateCartTotalPrice() {
  var dom_target = ".js-total-before-fee-cart-price";
  var total_cart_price = 0;

  $(".item-cart-price").each(function () {
    total_cart_price += Hura.Util.strToNumber($(this).html());
  });

  //log for other reference
  $("#js-total-before-fee-discount").val(total_cart_price);

  //giam gia khac: voucher, membership, loyalty point conversion
  var total_discount = 0;
  total_discount += Number($("#js-discount-voucher").val());
  total_discount += parseInt($("#js-discount-membership").val());

  var voucher_value = parseInt($("#js-discount-voucher").val());

  //phi khac: shipping, COD...
  var total_other_fee = 0;
  total_other_fee += parseInt($("#js-fee-shipping").val());
  total_other_fee += parseInt($("#js-fee-cod").val());
  //console.log(total_discount);
  
  var priceFreeship = parseInt($('#js_price_freeship').val());
  
   if($('#js_price_ship').val() == "nomal"){
            $("#js-inner-ship").html(`
                <div class="cart-customer-total d-flex align-items-center justify-content-between">
                  <div>
                    <span class="text">Phí vận chuyển: </span>
                  </div>
                  <p class="cart-customer-total-price">Chưa tính</p>
                </div>
            `);
  
              $(dom_target).html(formatCurrency(total_cart_price)+' đ');
              $(TOTAL_CART_VALUE_NODE).html(formatCurrency(total_cart_price - total_discount )+' đ');
          
        }else{
          var priceShip = parseInt($('#js_price_ship').val());
          if(total_cart_price >= priceFreeship || priceShip == 0){
                 //console.log(total_cart_price);
  					//console.log(priceFreeship)
              $("#js-inner-ship").html(`
                     <div class="cart-customer-total d-flex align-items-center justify-content-between">
                       <div>
                         <span class="text">Phí vận chuyển: </span>
                       </div>
                        <p class="cart-customer-total-price">Freeship</p>
                    </div>
              `);

              $(dom_target).html(formatCurrency(total_cart_price)+' đ');
              $(TOTAL_CART_VALUE_NODE).html(formatCurrency(total_cart_price - total_discount )+' đ');

          }else{
              var minusPriceShip = priceFreeship - total_cart_price;
  //console.log(total_cart_price);
  					//console.log(priceFreeship)
              $("#js-inner-ship").html(`
                   <div class="cart-customer-total d-flex align-items-center justify-content-between">
                       <div>
                         <span class="text">Phí vận chuyển: </span>
                       </div>
                        <p class="cart-customer-total-price">${formatCurrency(priceShip) + ' đ'}</p>
                    </div>
                    <div class="text-ship d-flex justify-content-between">
                        <div class="text-ship-left">
                            Mua thêm <span class="text-red-b" style="color:yellow;font-size:14px;">${formatCurrency(minusPriceShip)} đ</span> để được <span class="text-red-b" style="color:yellow;font-size:14px;"> Freeship</span>
                        </div>
                        <div class="text-ship-right">
                            <a href="/">Mua thêm</a>
                        </div>
                    </div>
              `);
				//console.log(total_discount)
  
  
              $(dom_target).html(formatCurrency(total_cart_price)+' đ');
              $(TOTAL_CART_VALUE_NODE).html(formatCurrency(total_cart_price - total_discount + priceShip )+' đ');
  
          }
      }
  
 
}

//thay doi tong gia cua 1 san pham
function changeItemTotalPrice() {
  var $row = $(this).closest(".js-item-row");
  var item_type = $row.data("item_type");
  var price = parseInt($row.find(".js-buy-price").val());
  var quantity = parseInt($row.find(".js-buy-quantity").val());
  var total_price = price * quantity;

  //loai bo so luong vo ly
  if (quantity < 1) {
    $row.find(".js-buy-quantity").val(1);
    total_price = 0;
  }

  $row.find(".item-cart-price").html(formatCurrency(total_price)+' đ');

  calculateCartTotalPrice();

  //console.log("updating cart = " + item_type);

  //save to cart
  switch (item_type) {
    case "product":
      Hura.Cart.Product.update($row.data("item_id"), $row.data("variant_id"), {quantity: quantity,});
      break;

    case "deal":
      Hura.Cart.Deal.update($row.data("item_id"), { quantity: quantity });
      break;

    case "combo":
      Hura.Cart.Combo.update($row.data("item_id"), { quantity: quantity });
      break;
  }

  //
}

//nghe thay doi so luong sp
function listenQuantityChange() {
  var $track_change = $(".js-quantity-change");

  //thay doi so luong sp mua, neu nhap so luong
  $track_change.on("change", function (e) {
    var quantity_stock = $(this).attr("data-stock");
    var $row = $(this).closest(".js-item-row");
    var current_quantity = $(this).val();
               
    if($(this).val() < 1) $(this).val(1); 
 
    if(current_quantity  > quantity_stock) {
      alert("Bạn được mua tối đa "+ quantity_stock + " sản phẩm này");
      $row.find(".js-buy-quantity").val(quantity_stock);
      changeItemTotalPrice.call(this);
      tinhSoLuongSanPham.call(this);

      return ;
    }


    changeItemTotalPrice.call(this);
    tinhSoLuongSanPham.call(this);
  });

  //thay doi so luong sp theo - hoac +
  $track_change.on("click", function (e) {
    if (e.target.nodeName === "INPUT") return;

    var quantity_change = parseInt(this.getAttribute("data-value"));
    var $row = $(this).closest(".cart-item-info");
    var current_quantity = parseInt($row.find(".js-buy-quantity").val());
    var quantity_stock = parseInt($row.find(".js-buy-quantity").attr("data-stock"));
                   
    //loai bo so luong vo ly
    if (current_quantity + quantity_change < 1) {
      $row.find(".js-buy-quantity").val(1);
      return;
    }

    if(current_quantity + quantity_change > quantity_stock) {
      alert("Bạn được mua tối đa "+ quantity_stock + " sản phẩm này");
      $row.find(".js-buy-quantity").val(quantity_stock);
      changeItemTotalPrice.call(this);
      tinhSoLuongSanPham.call(this);
      return ;
    }

    $row.find(".js-buy-quantity").val(current_quantity + quantity_change);

    //then update
    changeItemTotalPrice.call(this);
    tinhSoLuongSanPham.call(this);
  });
}
 
 function deleteCart(){
        let product_ids = [];
        $(".js-delete-item").each(function(){
            var $row        = $(this).closest(".js-item-row");
            var item_id     = $row.data("item_id");
            var variant_id  = $row.data("variant_id");                        
            product_ids.push({item_id: item_id, variant_id: variant_id})
            $row.remove();
        });  
        deleteAllCart(product_ids);         
    }

    async function deleteAllCart(product_ids){        
        for(let i = 0; i < product_ids.length; i++) {
            let item_id = product_ids[i].item_id;        
            let variant_id = product_ids[i].variant_id;            
            await Hura.Cart.Product.remove(item_id, variant_id);
        }

        setTimeout(function(){
            if($(".js-item-row").length==0){ location.reload();}
        },500);
         
    }  
  
function downloadCartImage() {
  var seconds = new Date().getTime() / 1000;
  var print_url = "{{ global.domain }}/print/user.php?view=cart&f="+parseInt(seconds)+"&uid="+Hura.User.getUserId(); 

  window.location = "https://screenshot.hurasoft.com/screenshot.php?url=" + encodeURIComponent(print_url);
}


//nghe xoa san pham
function listenDeleteCartItem() {
  $(".item-cart-icon").on("click", function () {
    var $row = $(this).closest(".cart-item-info");
    var item_type = $row.data("item_type");
    var item_id = $row.data("item_id");
    calculateCartTotalPrice();

    //console.log("deleting item from cart = " + item_type);

    var deleteStatus;
    //save to cart
    switch (item_type) {
      case "product":
        deleteStatus = Hura.Cart.Product.remove(
          item_id,
          $row.data("variant_id")
        );
        location.reload();
        break;
      case "deal":
        deleteStatus = Hura.Cart.Deal.remove(item_id);
        location.reload();
        break;
      case "combo":
        deleteStatus = Hura.Cart.Combo.remove(item_id);
        location.reload();
        break;
    }

    if (deleteStatus) {
      deleteStatus.then(function () {
        $row.remove();
        tinhSoLuongSanPham();
      });
    }
  });
}

  

  // Voucher
    function debounce(func, wait, immediate) {
        var timeout;
        return function() {
            var context = this, args = arguments;
            var later = function() {
                timeout = null;
                if (!immediate) func.apply(context, args);
            };
            var callNow = immediate && !timeout;
            clearTimeout(timeout);
            timeout = setTimeout(later, wait);
            if (callNow) func.apply(context, args);
        };
    };

    function voucher_input_change() {
        $('#js_voucher_input').change();
    }

    function listenVoucherCode(dom_node) {
        var cart_total_before_fee_discount = $("#js-total-before-fee-discount").val();
        var $message_holder = $("#js-voucher-message");
  
        var check_deal = 0
        $(".js-item-row").each(function(){
            var check = $(this).attr("data-check-deal")
            if (check == 1) {
                check_deal = 1;
            }
        })
        
        $(dom_node).change(debounce(function(){
            if (check_deal == 1) {
                $message_holder.html('<span class="red">Mã voucher không được áp dụng. Vui lòng xóa sản phẩm DEAL trong giỏ hàng</span>');
            } else{
                var voucher_code = this.value.trim();

                //update field to send when submit
                $("#js_coupon_code").val(voucher_code);
                $("#js-discount-voucher").val(0);
                $("#price-discount").html('');
                $message_holder.html('');

                //xu ly hien thi
                if(voucher_code.length > 2) {
                    var params = {
                        action_type: 'check', 
                        code : voucher_code , 
                        order_value : cart_total_before_fee_discount, 
                        product_ids : ''
                    }

                    Hura.Ajax.post('coupon', params).then(function (data) {
                        //console.log(data);
                        var voucher_info = data;

                        if(voucher_info.status == 'error') {
                            //bao loi
                            $message_holder.html(voucher_info.message);
                            return ;
                        }

                        $message_holder.html("Bạn đang sử dụng mã coupon/voucher: <b style='color: #f00;font-size: 16px'>" + voucher_info.coupon_info.code + "</b>");
                        $message_holder.show();
              
                        //xu ly khac
                        switch (voucher_info.coupon_info.type) {
                            case "cash": //giam tru tien
                                $("#js-discount-voucher").val(Hura.Util.strToNumber(voucher_info.coupon_info.cash_discount));
                                $("#price-discount").html(formatCurrency(voucher_info.coupon_info.cash_discount));
                                break;

                            case "priceoff"://giam gia %
                                //var total_price_in_cart = $('#js-total-before-fee-discount').val();
                                var total_price_in_cart = {% if global.module.name == 'combo_set' %}0{% else %}{{ page.cart_summary.total_value }}{% endif%};
                                var after_discount = Math.ceil( total_price_in_cart * voucher_info.coupon_info.content / 100);
                                $("#js-discount-voucher").val(Hura.Util.strToNumber(after_discount));
                                $("#price-discount").html(formatCurrency(voucher_info.total_cash_discount));
                                break;

                            case "pro":
                                //todo:

                                break;

                            case "other":
                                //todo:

                                break;
                        }

                        calculateCartTotalPrice();
                    })
                }else{
                    $("#js-discount-voucher").val(0);
                    $message_holder.html('');
                    //recalculate total
                    calculateCartTotalPrice();
                }
            }
        },100));
        
    }
    
    function getVoucherList(holder) {
        var params = {
            action_type: 'get-active-list', 
            limit: 50
        }

        Hura.Ajax.post('coupon', params).then(function (response) {
             //console.log(response);
            
            buildListVoucher(response, holder);

            $(".js-voucher-active").click(function(){
                $(".js-voucher-active").removeClass('current-voucher');
                $(this).addClass('current-voucher');
            });
        })
    }

    function buildListVoucher(response, holder) {
        var html = '';
        var current_time = (new Date()).getTime()/1000;

        if (response.total > 0) {
            Object.keys(response).forEach(function(key, keyIndex) {
                var data = response[key];
                Object.keys(data).forEach(function(item, itemIndex) {
                    var status          = data[item].can_use_with_cart.status;
                    var code            = data[item].code
                    var title           = data[item].title;
                    var id_coupon       = data[item].id;
                    var to_time         = data[item].to_time;
                    var time_left       = to_time - current_time;
                    var check_product   = data[item].can_use_with_cart.status;
                    
                    if (time_left > 0 && check_product == 'yes') {
                        html+=`<div class="voucher-item active-voucher js-voucher-active" onclick="voucherSelected('`+code+`')">`;
                    } else{
                        html+='<div class="voucher-item">';
                    }
                    html+= '<div class="code"> Nhập <b class="d-block text-18">'+code+'</b> </div>';
                    html+= '<div class="text"> <p>'+ title +'</p><i class="circle"></i></div> </div>';
                })
            })
        } else{
            html+= `
                <div class="no-voucher text-center">
                    <i class="no-voucher-img lazy" style="background-image:url(/static/assets/default/images/cart-ticket.png)"></i>

                    <p class="text-20 font-600 m-0"> Chưa có mã voucher nào ! </p>
                </div>
            `;
        }

        $(holder).html(html);
    }


    function voucherSelected(voucher_coder) {
        $("#js_voucher_input_pop").val(voucher_coder);
        $('#js-voucher-popupmessage').html("");
       
    }

    function voucherActive() {
        $("#js_voucher_input").val("");
        $("#js_voucher_input").change();

        var newCode = $("#js_voucher_input_pop").val();
        $("#js_voucher_input").val(newCode);
        $("#js_voucher_input").change();
        close_voucher();
   
    }
                                                                      
    function open_voucher() {
        $("#js-popup-voucher").show();
        $("body").addClass("overflow-hidden");
        $(".cart-voucher-popup").addClass("active")
    }

    function close_voucher() {
        $("#js-popup-voucher").hide();
        $("body").removeClass("overflow-hidden");
        $(".js-voucher-active").removeClass('current-voucher');
        $("#js_voucher_input_pop").val("");
        $(".cart-voucher-popup").removeClass("active")
    }

  