$(document).ready(function() {
    Chart.register(ChartDataLabels);
    Chart.defaults.plugins.tooltip.enabled = false;
  
    var myChart; 
    var itemCount = 0;
    var chartWrapper = $('#chartWrap');
    var chartPlaceholder = $('#chartPlaceholder');
  
    // Disable first option in all selects
    function disableFirstOption(selector) {
      $(selector).each(function () {
        $(this).find("option").first().prop("disabled", true);
      });
    }
    disableFirstOption(".roles_select");
  
    // Add one more - button
    $('#button-add').click(function(event) {
      event.preventDefault();
  
      if (itemCount <= 2) {
        addSelectItem();
        itemCount++;
      } else {
        $('#add-button-wrap').css("display", "none");
      }
    });
  
    // Placeholder delete - button
    $('#placeholder-add-button').click(function() {
      $('#button-add').click();
      $('#calculatorPlaceholder').fadeOut();
      $('#rolesWrapper').fadeIn();
    });
  
    // Filter categories
    var screenWidth = $(window).width();
    if (screenWidth >= 991) {
      $(document).on("change", ".is-category", function() {
        var $category = $(this);
        var $jobSelect = $category.closest(".roles_form-item").find(".is-job");
        var $jobOptions = $jobSelect.find("option");
      
        // Hide all options and show only those that match the selected category
        $jobOptions.hide();
        $jobOptions.filter('[value="' + $category.val() + '"]').show();
      
        // Set the job select to the first visible option
        $jobSelect.val($jobOptions.first().val());
      });
    } else {
      var categorySelect = $(".is-category");
      var jobOptions = $(".is-job option");
  
      categorySelect.change(function() {
        var selectedCategory = categorySelect.val();
        jobOptions.each(function(option) {
          if ($(option).data('category') === selectedCategory) {
            $(option).show();
          } else {
            $(option).hide();
          }
        });
      });
  
      var initialCategory = categorySelect.val();
      jobOptions.each(function(option) {
        if ($(option).data('category') !== initialCategory) {
          $(option).hide();
        }
      });
    }
  
    // Form submission
    $('#wf-form-LatAm-Calculator').submit(function(event) {
      event.preventDefault();
  
      chartWrapper.fadeOut();
      $('.calculator_lottie-wrap').fadeIn();
  
      const jobAndSeniorityData = {};
      const formItems = $(".roles_form-item");
      let count = 0;
  
      formItems.each(function(index, item) {
        if (count <= 3) {
          const jobTitleSelect = $(item).find(".is-job");
          const senioritySelect = $(item).find(".is-seniority");
          const quantityInput = $(item).find(".roles_number-input");
          if (jobTitleSelect.length && senioritySelect.length && quantityInput.length) {
            const jobTitle = jobTitleSelect.find('option:selected').text();
            const seniority = senioritySelect.find('option:selected').text();
            const quantity = quantityInput.val();
            jobAndSeniorityData[`job${count + 1}`] = jobTitle;
            jobAndSeniorityData[`seniority${count + 1}`] = seniority;
            jobAndSeniorityData[`quantity${count + 1}`] = quantity;
            count++;
            console.log(jobAndSeniorityData);
          } else {
            console.error("Job title or seniority select not found.");
          }
        } else {
          console.warn("Maximum number of entries reached (3).");
        }
      });
  
      const url = "https://hook.us1.make.com/21yqhgauv8mhp2u7nsz024bl2mkxsn2w";
      fetch(url, {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify(jobAndSeniorityData),
      })
        .then((response) => response.text())
        .then((data) => {
          $('.calculator_lottie-wrap').fadeOut();
  
          const str = data;
          const regex = /\{(.*?)\}/g;
          const matches = str.match(regex);
          const cleanMatches = matches.map((match) =>
            match.replace(/[\{\}]/g, "")
          );
  
          const chartContainer = document.querySelector("#chart-container");
          var ctx = document.getElementById("canvas").getContext("2d");
  
          // Assume cleanMatches is an array with two salary values [salary1, salary2]
          var salaryDifference = cleanMatches[0] - cleanMatches[1];  
          var formattedSalaryDifference = formatSalary(salaryDifference);
  
          document.getElementById("result-amount").textContent = formattedSalaryDifference;
  
          function formatSalary(amount) {
              var absAmount = Math.abs(amount); // To handle negative values correctly
              var suffix = "";
              
              if (absAmount >= 1000000) {
                  amount = (amount / 1000000).toFixed(2);
                  suffix = "m";
              } else if (absAmount >= 1000) {
                  amount = (amount / 1000).toFixed(0); // Use toFixed(0) for integer values
                  suffix = "k";
              } else {
                  amount = amount.toFixed(2);
              }
              
              return amount + suffix;
          }
  
  
          if (myChart) {
            myChart.destroy();
          }
  
          myChart = new Chart(ctx, {
            type: "bar",
            data: {
              labels: ["USA", "Latin America"],
              datasets: [
                {
                  label: "US Salary",
                  backgroundColor: "#BDB8AA",
                  data: [cleanMatches[0], ""],
                  barPercentage: 1,
                  categoryPercentage: 1,
                  barThickness: 'flex'    
                },
                {
                  label: "LatAm Salary",
                  backgroundColor: "#10DB6D",
                  data: ["", cleanMatches[1]],
                  barPercentage: 1,
                  categoryPercentage: 1,
                  barThickness: 'flex'    
                },
              ],
            },
            options: {
              plugins: {
                datalabels: {
                  font: {
                    size: 40,
                  },
                  color: "white",
                  formatter: function (value) {
                    if (value >= 1000000) {
                      value = "$" + (value / 1000000).toFixed(1) + "m";
                    } else if (value >= 1000) {
                      if (Number.isInteger(value / 1000)) {
                        value = "$" + value / 1000 + "k";
                      } else {
                        value = "$" + (value / 1000).toFixed(1) + "k";
                      }
                    } else {
                      value = value;
                    }
                    return value;
                  },
                },
                legend: { display: false },
              },
              maintainAspectRatio: false,
              responsive: true,
              height: chartContainer.offsetHeight,
              maxHeight: chartContainer.offsetHeight,
              scales: {
                x: {
                  display: false,
                  stacked: true,
                  ticks: {
                    beginAtZero: true,
                    display: false,
                  },
                  grid: {
                    display: false,
                  },
                },
                y: {
                  display: false,
                  stacked: true,
                  ticks: {
                    beginAtZero: true,
                    display: false,
                  },
                  grid: {
                    display: false,
                  },
                },
              },
            },
          });
  
          chartWrapper.fadeIn();
          chartPlaceholder.fadeOut();
        })
        .catch((error) => console.error("Error:", error));
  
      if (screenWidth <= 991) {
        $('html, body').animate({
          scrollTop: $('#calculator-results').offset().top
        }, 800);
      }
    });
  
    // Event listener for increment and decrement buttons
    $(document).on('click', '.roles_number-button', function() {
      var upButton = $(this).hasClass('up');
      var downButton = $(this).hasClass('down');
      var numberInput = $(this).closest('.roles_form-item').find('.roles_number-input');
  
      if (upButton) {
        var hiresNumber = parseInt(numberInput.val()) || 0;
        hiresNumber++;
        numberInput.val(hiresNumber);
      } else if (downButton) {
        var hiresNumber = parseInt(numberInput.val()) || 0;
        if (hiresNumber > 0) {
          hiresNumber--;
          numberInput.val(hiresNumber);
        }
      }
    });
  
    // Event listener for input field change
    $(document).on('input', '.roles_number-input', function() {
      var inputValue = parseInt($(this).val());
      if (!isNaN(inputValue)) {
        $(this).val(inputValue);
      } else {
        $(this).val(0);
      }
    });
  
    // Add selects items to DOM
    function addSelectItem() {
      var domString = '<div class="roles_form-item"><select name="Category" data-name="Category" required="" class="roles_select is-category w-select"><option value="" disabled="" selected="">Select Role Category</option><option value="0">Accounting</option><option value="1">Finance</option><option value="2">Marketing</option><option value="3">Sales</option><option value="4">Customer Support</option><option value="5">Operations</option><option value="6">HR</option><option value="7">IT</option><option value="8">Data</option><option value="9">Design</option></select><select name="Job-Title" data-name="Job Title" required="" class="roles_select is-job w-select"><option value="" disabled="" selected="">Select Job Title</option><option value="0">Accountant</option><option value="0">Accounting Analyst</option><option value="0">Accounting Operations Leader</option><option value="0">Accounts Payable Manager</option><option value="0">Accounts Receivable / Billing Coordinator</option><option value="0">Audit Manager</option><option value="0">Benefits &amp; Payroll Coordinator</option><option value="0">Bookkeeper</option><option value="0">Controller</option><option value="0">Financial Due Diligence Accounting Analyst</option><option value="0">Tax Professional</option><option value="1">Corporate Development Analyst</option><option value="1">Corporate Finance Analyst</option><option value="1">Director of Finance</option><option value="1">Finance Manager</option><option value="1">Financial Analyst</option><option value="1">FP&amp;A Analyst</option><option value="1">Private Equity Analyst</option><option value="1">Professional Services Analyst</option><option value="1">Strategic Finance Associate</option><option value="2">Account Manager</option><option value="2">Ad Ops Specialist</option><option value="2">Associate Advertising Manager</option><option value="2">Community Builder</option><option value="2">Content Manager</option><option value="2">Copywriter</option><option value="2">Digital Marketing Specialist</option><option value="2">E-Commerce Marketplace Manager</option><option value="2">Email Marketing Specialist</option><option value="2">Growth Marketing Specialist</option><option value="2">Head of Marketing</option><option value="2">Marketing Analyst</option><option value="2">Marketing Automation Specialist</option><option value="2">Marketing Manager</option><option value="2">Marketing Specialist</option><option value="2">Media Buyer</option><option value="2">Media Manager</option><option value="2">Merchandising Specialist</option><option value="2">Product Manager</option><option value="2">SEO Specialist</option><option value="3">Account Executive</option><option value="3">Business Development Representative</option><option value="3">Inbound Sales Representative</option><option value="3">Sales Development Representative</option><option value="3">Sales Manager</option><option value="4">Customer Operations Assistant</option><option value="4">Customer Success Manager</option><option value="4">Customer Support Analyst</option><option value="4">Customer Support Representative</option><option value="4">Head of Customer Success</option><option value="5">Administrative Assistant / VA</option><option value="5">Appointment Setter</option><option value="5">Business Associate</option><option value="5">Executive Assistant</option><option value="5">General Manager</option><option value="5">Head of Operations</option><option value="5">Implementation Analyst</option><option value="5">Operations Analyst</option><option value="5">Operations Associate</option><option value="5">Procurement Specialist</option><option value="5">Project Manager</option><option value="6">HR Generalist</option><option value="6">HR Manager</option><option value="6">IT Recruiter</option><option value="6">Recruiter / Sourcing Specialist</option><option value="7">Back-End Developer / Engineer</option><option value="7">Dev Ops &amp; Site Reliability Engineer (SRE)</option><option value="7">Front-End Developer / Engineer</option><option value="7">Full-Stack Developer / Engineer</option><option value="7">Mobile Developer / Engineer</option><option value="7">QA Engineer</option><option value="7">Scrum Master</option><option value="7">Software Engineer</option><option value="7">Software Implementer</option><option value="7">Web Developer</option><option value="8">Business Intelligence Analyst</option><option value="8">Data Analyst</option><option value="8">Data Engineer</option><option value="8">Data Engineering Manager</option><option value="8">Data Lead</option><option value="8">Data Scientist</option><option value="8">Director Of Data</option><option value="9">Graphic Designer</option><option value="9">Product Designer</option><option value="9">UI/UX Designer</option><option value="9">Video Editor</option></select><select name="Seniority" data-name="Seniority" required="" class="roles_select is-seniority w-select"><option value="" disabled="" selected="">Select  Seniority</option><option value="Junior">Junior (0-2 yrs exp)</option><option value="Mid-range">Mid-range (3-5 yrs exp)</option><option value="Senior">Senior (5+ yrs exp)</option></select><div id="w-node-_797ee094-f1ce-147e-108c-1a65ae7ecd9b-592dd49c" class="roles_number-wrap"><div class="roles_number-button down"><img width="14" height="14" alt="" src="https://assets-global.website-files.com/62276057f672e497e5a941d9/664724a16767ca87ba93ef56_Minus%20icon.svg" loading="lazy" class="roles-number_button-icon"></div><input class="roles_number-input w-input" max="99" maxlength="256" name="Number" data-name="Number" min="1" placeholder="99" type="number" id="Number" required="" value="1"><div class="roles_number-button up"><img width="14" height="14" alt="" src="https://assets-global.website-files.com/62276057f672e497e5a941d9/664724a106b51a05a7c0a7f6_Plus%201%20(1).svg" loading="lazy" class="roles-number_button-icon"></div></div><div class="roles_button-delete"><img width="20" height="20" alt="" src="https://assets-global.website-files.com/62276057f672e497e5a941d9/6617ff4a3447f808708b753b_trash%201.svg" loading="lazy" class="icon-20"></div><div class="roles_form-divider"></div></div>';
      $("#roles-list").append(domString);
      $('#button-add').css("display", "block");
      disableFirstOption(".roles_select");
    }
  
    // Delete Item - Button
    $(document).on('click', '.roles_button-delete', function() {
      $(this).closest(".roles_form-item").remove();
      itemCount--;
  
      if (itemCount <= 2) {
        $('#add-button-wrap').css("display", "grid");
      }
    });
  });