/**
 * 飯塚地区消防本部 - animations.js
 * Intersection Observer によるスクロール連動アニメーション制御
 */
(function () {
  'use strict';

  document.addEventListener('DOMContentLoaded', function () {
    initScrollAnimations();
    initHeroAnimation();
  });

  /**
   * Intersection Observer でスクロール連動アニメーションを制御
   * data-animate 属性を持つ要素がビューポートに入ったら is-visible クラスを付与
   * data-delay 属性で表示までの遅延（ms）を指定可能
   */
  function initScrollAnimations() {
    var animateElements = document.querySelectorAll('[data-animate]');

    if (!animateElements.length) return;

    if (!('IntersectionObserver' in window)) {
      animateElements.forEach(function (el) {
        el.classList.add('is-visible');
      });
      return;
    }

    var observer = new IntersectionObserver(
      function (entries) {
        entries.forEach(function (entry) {
          if (entry.isIntersecting) {
            var el = entry.target;
            var delay = parseInt(el.dataset.delay, 10) || 0;

            if (delay > 0) {
              setTimeout(function () {
                el.classList.add('is-visible');
              }, delay);
            } else {
              el.classList.add('is-visible');
            }

            observer.unobserve(el);
          }
        });
      },
      {
        threshold: 0.1,
        rootMargin: '0px 0px -40px 0px'
      }
    );

    animateElements.forEach(function (el) {
      observer.observe(el);
    });
  }

  /**
   * ヒーローセクションのページ読み込みアニメーション
   * .ifd-hero に hero-animate クラスを付与して CSS アニメーションを発火
   */
  function initHeroAnimation() {
    var hero = document.querySelector('.ifd-hero');
    if (!hero) return;

    requestAnimationFrame(function () {
      hero.classList.add('hero-animate');
    });
  }
})();

/**
 * 飯塚地区消防本部 - main.js
 * 初期化処理 / ユーティリティ
 */
(function () {
  'use strict';

  document.addEventListener('DOMContentLoaded', function () {
    console.log('飯塚地区消防本部 WEB - initialized');
  });
})();

/**
 * 飯塚地区消防本部 - navigation.js
 * ヘッダーのスクロール変化 / スムーズスクロール
 */
(function () {
  'use strict';

  document.addEventListener('DOMContentLoaded', function () {
    initHeaderScroll();
    initSmoothScroll();
    initHamburgerMenu();
  });

  /**
   * スクロール時にヘッダーに is-scrolled クラスを付与
   * glassmorphism 効果 + box-shadow を適用
   */
  function initHeaderScroll() {
    var header = document.querySelector('.ifd-header') || document.querySelector('.v3-header');
    if (!header) return;

    var scrollThreshold = 60;
    var ticking = false;

    function updateHeader() {
      if (window.scrollY > scrollThreshold) {
        header.classList.add('is-scrolled');
      } else {
        header.classList.remove('is-scrolled');
      }
      ticking = false;
    }

    window.addEventListener('scroll', function () {
      if (!ticking) {
        requestAnimationFrame(updateHeader);
        ticking = true;
      }
    }, { passive: true });

    updateHeader();
  }

  /**
   * ハンバーガーメニューの開閉（モバイル）
   */
  function initHamburgerMenu() {
    var hamburger = document.querySelector('.ifd-hamburger') || document.querySelector('.v3-hamburger');
    var header = document.querySelector('.ifd-header') || document.querySelector('.v3-header');
    if (!hamburger || !header) return;

    var navSelector = header.classList.contains('v3-header') ? '.v3-header-nav a' : '.ifd-global-nav a';

    hamburger.addEventListener('click', function () {
      var isOpen = header.classList.toggle('is-menu-open');
      hamburger.setAttribute('aria-expanded', isOpen ? 'true' : 'false');
      hamburger.setAttribute('aria-label', isOpen ? 'メニューを閉じる' : 'メニューを開く');
    });

    var navLinks = header.querySelectorAll(navSelector);
    navLinks.forEach(function (link) {
      link.addEventListener('click', function () {
        header.classList.remove('is-menu-open');
        hamburger.setAttribute('aria-expanded', 'false');
        hamburger.setAttribute('aria-label', 'メニューを開く');
      });
    });

    window.addEventListener('resize', function () {
      if (window.innerWidth > 768 && header.classList.contains('is-menu-open')) {
        header.classList.remove('is-menu-open');
        hamburger.setAttribute('aria-expanded', 'false');
        hamburger.setAttribute('aria-label', 'メニューを開く');
      }
    });
  }

  /**
   * アンカーリンクのスムーズスクロール
   */
  function initSmoothScroll() {
    document.querySelectorAll('a[href^="#"]').forEach(function (anchor) {
      anchor.addEventListener('click', function (e) {
        var href = this.getAttribute('href');
        if (href === '#') return;

        var target = document.querySelector(href);
        if (!target) return;

        e.preventDefault();

        var header = document.querySelector('.ifd-header') || document.querySelector('.v3-header');
        var headerHeight = header ? header.offsetHeight : 0;
        var targetPosition = target.getBoundingClientRect().top + window.scrollY - headerHeight - 10;

        window.scrollTo({
          top: targetPosition,
          behavior: 'smooth'
        });
      });
    });
  }
})();



document.addEventListener('DOMContentLoaded', function () {
  var wrap = document.querySelector('.ifd-cms-list');
  if (!wrap) return;
  var items = wrap.querySelectorAll('.ifd-news-item');
  if (!items.length) return;
  var perPage = 20; /*表示件数*/
  var totalPages = Math.ceil(items.length / perPage);
  var currentPage = 1;
  var range = 2;
  function showPage(page) {
    currentPage = page;
    var start = (page - 1) * perPage;
    var end = start + perPage;
    for (var i = 0; i < items.length; i++) {
      items[i].style.display = (i >= start && i < end) ? '' : 'none';
    }
    buildNav();
    window.scrollTo({ top: 0, behavior: 'smooth' });
  }
  function buildNav() {
    var old = wrap.querySelector('.ifd-pagination');
    if (old) old.remove();
    if (totalPages <= 1) return;
    var nav = document.createElement('div');
    nav.className = 'ifd-pagination';
    function addLink(label, page) {
      nav.innerHTML += '<a href="#" data-p="' + page + '">' + label + '</a>';
    }
    function addCurrent(label) {
      nav.innerHTML += '<span class="is-current">' + label + '</span>';
    }
    function addDots() {
      nav.innerHTML += '<span class="ifd-pagination-dots">\u2026</span>';
    }
    if (currentPage > 1) addLink('\u00ab', 1);
    var startPage = Math.max(1, currentPage - range);
    var endPage = Math.min(totalPages, currentPage + range);
    if (startPage > 1) { addLink('1', 1); if (startPage > 2) addDots(); }
    for (var i = startPage; i <= endPage; i++) {
      if (i === currentPage) { addCurrent(i); } else { addLink(i, i); }
    }
    if (endPage < totalPages) { if (endPage < totalPages - 1) addDots(); addLink(totalPages, totalPages); }
    if (currentPage < totalPages) addLink('\u00bb', totalPages);
    nav.addEventListener('click', function (e) {
      e.preventDefault();
      var a = e.target.closest('a[data-p]');
      if (a) showPage(parseInt(a.getAttribute('data-p')));
    });
    wrap.appendChild(nav);
  }
  showPage(1);
});
