/*
Theme Name: Xwrite child
Version: 2.0.0
Template: xwrite
*/

document.addEventListener('DOMContentLoaded', function () {
  const forms = document.querySelectorAll('.wpcf7 form');

  forms.forEach(function (form) {
    const addressGroups = [
      {
        zip: 'zip',
        pref: 'pref',
        city: 'city',
        addr: 'addr'
      },
      {
        zip: 'zip2',
        pref: 'pref2',
        city: 'city2',
        addr: 'addr2'
      }
    ];

    addressGroups.forEach(function (group) {
      const zipInput = form.querySelector('#' + group.zip);
      const prefInput = form.querySelector('#' + group.pref);
      const cityInput = form.querySelector('#' + group.city);
      const addrInput = form.querySelector('#' + group.addr);

      if (!zipInput || !prefInput || !cityInput || !addrInput) {
        return;
      }

      let lastZip = '';

      zipInput.addEventListener('input', async function () {
        const zip = zipInput.value
          .replace(/[０-９]/g, function (c) {
            return String.fromCharCode(c.charCodeAt(0) - 0xFEE0);
          })
          .replace(/[^0-9]/g, '');

        if (zip.length !== 7 || zip === lastZip) {
          return;
        }

        lastZip = zip;

        try {
          const response = await fetch(
            'https://zipcloud.ibsnet.co.jp/api/search?zipcode=' + zip
          );
          const data = await response.json();

          // 郵便番号を入力し直していたら古い結果を使わない
          const currentZip = zipInput.value
            .replace(/[０-９]/g, function (c) {
              return String.fromCharCode(c.charCodeAt(0) - 0xFEE0);
            })
            .replace(/[^0-9]/g, '');

          if (currentZip !== zip) {
            return;
          }

          if (data.results && data.results.length > 0) {
            const address = data.results[0];

            prefInput.value = address.address1;
            cityInput.value = address.address2;

            // 町域は自動入力。手入力した番地は上書きしない
            if (
              !addrInput.value ||
              addrInput.value === addrInput.dataset.zipTown
            ) {
              addrInput.value = address.address3;
              addrInput.dataset.zipTown = address.address3;
            }

            [prefInput, cityInput, addrInput].forEach(function (input) {
              input.dispatchEvent(new Event('change', {
                bubbles: true
              }));
            });
          }
        } catch (error) {
          console.error('住所の自動入力に失敗しました', error);
        }
      });
    });
  });
});
