$(document).ready(function () {
    $("body").off('click').on("click", '.remove', remove);
    $("body").on("blur", '.rate', autoAddRows);
    $("body").on("blur", '.vouchdt', valDate);
    $("body").on("keyup blur change", '.qty', itemCal);
    $("body").on("keyup blur change", '.rate', manualCal);
    $("body").on("keyup blur change", '.delchg,.rate,.qty,.prevbal', mainCal);
    $("body").on("blur", '.itemcode', GetItemFromCode);
    $("body").on("change", '.descrip', GetCodeFromItem);
    $("body").on("blur change", '.rateon', updateOptions);

    function updateOptions() {
        var primaryValue = $('.rateon').val();
        var usertype = $('.usertype').val();
        var secondarySelect = $('.ratetype');

        // Clear current options
        secondarySelect.empty();

        if (primaryValue == 'L') {
            // Add options for 'calculation'
            secondarySelect.append(new Option('Normal', 'N'));
        } else {
            if (usertype < 3) {
                secondarySelect.append(new Option('Calculation', 'C'));
                secondarySelect.append(new Option('Normal', 'N'));
            } else {
                secondarySelect.append(new Option('Calculation', 'C'));
            }
        }
    }

    function GetItemFromCode() {
        var row = $(this).closest("tr"),
                rateon = $('.rateon').val(),
                code = row.find('.itemcode').val();

        if (code != '') {
            $.ajax({
                type: "POST",
                datatype: "json",
                url: "getItemdtl.php",
                data: {code: code, rateon: rateon},
                success: function (response) {
                    var m = response;
                    row.find(".descrip").val(m.descrip).trigger('change');
//                    row.find(".itemcode").val(m.itemcode).trigger('change');
                    row.find(".hidrate").val(m.rate);
                    row.find(".unit").val(m.unit);
                    row.find('.qty').focus();
                },
                error: function (request, textStatus, errorThrown) {

                }
            });
        }
    }

    function GetCodeFromItem() {
        var row = $(this).closest("tr"),
                rateon = $('.rateon').val(),
                descrip = row.find('.descrip').val();

        if (descrip != '') {
            $.ajax({
                type: "POST",
                datatype: "json",
                url: "getItemdtl.php",
                data: {descrip: descrip, rateon: rateon},
                success: function (response) {
                    var m = response;
//                    row.find(".descrip").val(m.descrip).trigger('change');
                    row.find(".itemcode").val(m.itemcode);
                    row.find(".hidrate").val(m.rate);
                    row.find(".unit").val(m.unit);
                    row.find('.qty').focus();
                },
                error: function (request, textStatus, errorThrown) {

                }
            });
        }
        // var tr = $(this).closest("tr");
        // tr.find('.qty').focus();
    }

    function valDate() {
        var startDate = $('.vouchdt').val();

        var date = new Date(startDate); // Convert the start date string to a JavaScript Date object
        date.setDate(date.getDate() + 8); // Add 8 days to the date
        var year = date.getFullYear(); // Format the new date to YYYY-MM-DD format
        var month = ('0' + (date.getMonth() + 1)).slice(-2);
        var day = ('0' + date.getDate()).slice(-2);
        var newDate = year + '-' + month + '-' + day;
        $('.validupto').val(newDate); // Set the new date value to the end date input
    }

    $("form").submit(function () {
        $("#submit").hide();
        var party = $('.client').val(),
                valid = true;

        if (party == '') {
            var message = "Client Cannot Be Empty";
            alert(message);
            $("#submit").show();
            return false;
            valid = false;
        }

        if (valid) {
            var isValid = true;

            if (isValid) {
                $("#submit").hide();
                $("#cancel").hide();

            }
        }
    });


    $(".applbl").hide();
    $(".apprvdt").hide();

    function itemCal() {
        var tr = $(this).closest("tr"),
                fullp = 0, fullr = 0, full = 0,
                halfp = 0, halfr = 0, half = 0,
                quarterp = 0, quarterr = 0, quarter = 0,
                lessquarterp = 0, lessquarterr = 0, lessquarter = 0;

        var qty = parseFloat(tr.find(".qty").val()),
                rate = parseFloat(tr.find(".hidrate").val()),
//                amount = parseFloat(tr.find(".amount").val()),
                type = $('.type').val(),
                ratetype = $('.ratetype').val(),
                rateon = $('.rateon').val(),
                totalamt = 0,
                amount = 0,
                finrate = 0,
                finamt = 0,
                finalamt = 0;

        var ratePerMl = rate;

        fullp = ratePerMl;
        fullr = fullp % 5;
        full = fullp - fullr;

        halfp = Math.round(full * 1.05 / 2);
        halfr = halfp % 5;
        half = halfp - halfr;

        quarterp = Math.round(half * 1.05 / 2);
        quarterr = quarterp % 5;
        quarter = quarterp - quarterr;

        lessquarterp = Math.round(quarter * 1.05 / 2.5);
        lessquarterr = lessquarterp % 5;
        lessquarter = lessquarterp - lessquarterr;

//        alert(type);
//        alert(ratetype);
//        alert(rateon);
        if (type != 'T') {
            if (ratetype != 'N') {
                if (rateon == 'K') {
                    if (qty >= 1000) {
                        amount = qty * full;
                        finrate = full;
                        finamt = finrate / 1000 * qty;
                    } else if (qty >= 500 && qty < 1000) {
                        amount = qty * half;
                        finrate = half;
                        finamt = finrate / 500 * qty;
                    } else if (qty >= 250 && qty < 500) {
                        amount = qty * quarter;
                        finrate = quarter;
                        finamt = finrate / 250 * qty;
                    } else if (qty >= 1 && qty < 250) {
                        amount = qty * lessquarter;
                        finrate = lessquarter;
                        finamt = finrate / 100 * qty;
                    }
                    finalamt = Math.round(finamt);
                } else {
                    finrate = ratePerMl;
                    finamt = finrate / 1000 * qty;
                    finalamt = Math.round(finamt);
                }
            } else {
                finrate = ratePerMl;
                finamt = finrate / 1000 * qty;
                finalamt = Math.round(finamt);
            }
        } else {
            finamt = rate;
            finalamt = Math.round(finamt);
        }

        tr.find(".rate").val(finrate);
        tr.find(".amount").val(finalamt);
        mainCal();
    }
    
    function manualCal() {
        var tr = $(this).closest("tr") ;
        var qty = parseFloat(tr.find(".qty").val()),
                rate = parseFloat(tr.find(".rate").val()),
                type = $('.type').val(),                
                ratetype = $('.ratetype').val(),
                rateon = $('.rateon').val(),
                finrate = 0,
                finamt = 0,
                finalamt = 0;

        var finrate = rate;

        if (type != 'T') {
            if (ratetype != 'N') {
                if (rateon == 'K') {
                    if (qty >= 1000) {
                        finamt = finrate / 1000 * qty;
                    } else if (qty >= 500 && qty < 1000) {
                        finamt = finrate / 500 * qty;
                    } else if (qty >= 250 && qty < 500) {
                        finamt = finrate / 250 * qty;
                    } else if (qty >= 1 && qty < 250) {
                        finamt = finrate / 100 * qty;
                    }
                    finalamt = Math.round(finamt);
                } else {
                    finamt = finrate / 1000 * qty;
                    finalamt = Math.round(finamt);
                }
            } else {
                finamt = finrate / 1000 * qty;
                finalamt = Math.round(finamt);
            }
        } else {
            finamt = rate;
            finalamt = Math.round(finamt);
        }

        tr.find(".rate").val(finrate);
        tr.find(".amount").val(finalamt);
        mainCal();
    }


    function mainCal() {
        var tr = $(this).closest("tr"),
                val = 0;
        $(".amount").each(function () {
            if (!isNaN(this.value) && this.value.length != 0) {
                val += parseFloat(this.value);
            }
        });
        var tot = parseFloat(val);
        var ttot = Math.round(tot);
        $('.totamt').val(ttot);
        var delchg = $('.delchg').val();
        var val1 = $('.totamt').val();
        var totval = parseFloat(val1) + parseFloat(delchg);
        var totfinal = parseFloat(totval);
        $('.netamt').val(totfinal);
        var prevbal = $('.prevbal').val();
        var totbill = parseFloat(totval) + parseFloat(prevbal);
        $('.totbal').val(totbill);
    }

//    function checkCount() {
//        var val1 = 0;
//        var val2 = 0;
//        var val3 = 0;
//        $(".item").each(function () {
//            if (!isNaN(this.value) && this.value.length != 0) {
//                val1 += 1;
//            }
//        });
//        $(".vol").each(function () {
//            if (!isNaN(this.value) && this.value.length != 0) {
//                val2 += parseFloat(this.value);
//            }
//        });
//        $(".qty").each(function () {
//            if (!isNaN(this.value) && this.value.length != 0) {
//                val3 += parseFloat(this.value);
//            }
//        });
//        $(".totvol").val(val2);
//        $(".totqty").val(val3);
//        $(".totitem").val(val1);
//    }


//    function checkUnit() {
//        var tr = $(this).closest("tr"),
//                itemgrp = tr.find(".itemgrp").val(),
//                itemcode = tr.find(".item").val(),
//                stkunit = tr.find(".stkunit").val(),
//                itempart = tr.find(".itempart").val(),
//                unit = tr.find(".unit").val(),
//                qty = tr.find(".qty").val(),
//                vol = tr.find(".vol").val();
//        if (qty > 0) {
//            $.ajax({
//                type: 'GET',
//                dataType: 'json',
//                url: "get_Vol.php",
//                data: "stkunit=" + stkunit + "&itemcode=" + itemcode + "&unit=" + unit + "&qty=" + qty + "&vol=" + vol + "&itempart=" + itempart + "&itemgrp=" + itemgrp,
//                success: function (response) {
//                    var vol = response.vol;
//                    var stkvol = response.stkvol;
//                    tr.find('.vol').val(vol);
//                    tr.find('.stkvol').val(stkvol);
//                },
//                error: function (request, textStatus, errorThrown) {
//                    alert(errorThrown);
//                }
//            });
//        }
//    }

//    function GetItem() {
//        var tr = $(this).closest("tr"),
//                itemcode = tr.find(".item").val(),
//                itemgrp = tr.find(".itemgrp").val();
//        $.post('get_Item.php', {itemgrp: itemgrp, itemcode: itemcode}, function (data) {
//            if (data != '') {
//                tr.find(".item").html(data).trigger('change');
//                tr.find(".item").focus();
//            }
//        });
//    }

//    function getDispUnit() {
//        var tr = $(this).closest("tr"),
//                itemcode = tr.find(".item").val();
//        $.post('get_Unit.php', {itemcode: itemcode, flag: 'I', disp: 'D'}, function (data) {
//            if (data != '') {
//                tr.find(".unit").html(data).trigger('change');
////                tr.find(".unit").focus();
//            }
//        });
//    }

//    function getStkUnit() {
//        var tr = $(this).closest("tr"),
//                itemcode = tr.find(".item").val();
//        $.post('get_Unit.php', {itemcode: itemcode, flag: 'I', disp: 'S'}, function (data) {
//            if (data != '') {
//                tr.find(".stkunit").val(data);
//
////                tr.find(".stkunit").html(data).trigger('change');
////                tr.find(".stkunit").focus();
//            }
//        });
//    }

//    function showDetail() {
//        var tr = $(this).closest("tr");
//        var name = tr.find('.item').val();
//        $.ajax({
//            type: 'GET',
//            dataType: 'json',
//            url: "get_itemrate_dtl.php",
//            data: "name=" + name + "",
//            success: function (response) {
//                var hsncode = response.hsncode;
//                $(tr.find('.hsncode')).val(hsncode);
//            },
//            error: function (request, textStatus, errorThrown) {
//                alert(errorThrown);
//            }
//        });
//    }



    $('#addnew').click(function () {
        AddRows();
    });

    function autoAddRows() {
        var ctr = $('#items').val();
        var tr = $(this).closest("tr");
        var srno = tr.find(".srno").val();
        if (srno == ctr) {
            AddRows();
        }
    }

    function remove() {
        $(this).closest("tr").remove();
    }

    function AddRows() {
        var ctr = $('#items').val();
        var qty = $(".tbody tr:last").find(".qty").val();

        var hide_check = "";
        if ($("#del_all").prop("checked")) {
            hide_check = 0;
        } else {
            hide_check = 1;
        }
        ctr++;
        $('#items').val(ctr);
        var detail = ".fetchpart_" + ctr;
        var focusFld = ".focusFld_" + ctr;
        $.post('estimate_add.php', {ctr: ctr, hide: hide_check, qty: qty}, function (data) {
            $(data).appendTo('.tbody');
            $(focusFld).focus();
            $(detail).select2();

        });
        mainCal();
    }

    //////////////////////////////////////////////Search Part - End  //////////////////////////////////////////////
});