<?php
declare(strict_types=1);
if ( ! defined( 'ABSPATH' ) ) { exit; }
/**
 * Custom Fields — Helper Functions.
 * @package WTE_Business_Card
 */

/**
 * フロントページとして設定された固定ページのIDを取得する。
 * - WordPress読み取り設定で「固定ページ」が指定されている場合はそのIDを返す。
 * - 「最新の投稿」設定の場合でも front-page.php が表示されている場合は
 *   グローバル $post からIDを取得する。
 * - いずれでも取得できない場合は 0 を返す。
 */
function wte_get_front_page_id(): int {
	// 1. WordPress 読み取り設定で明示的に固定ページが選択されている場合
	$front = (int) get_option( 'page_on_front', 0 );
	if ( $front > 0 ) {
		return $front;
	}

	// 2. フロントページテンプレートが実行中（is_front_page()）で、
	//    グローバル $post が存在する場合
	if ( is_front_page() ) {
		global $post;
		if ( $post instanceof WP_Post && $post->ID > 0 ) {
			return $post->ID;
		}
	}

	// 3. _wte_is_front_page メタキーで識別されるページを検索
	$pages = get_pages( [
		'meta_key'   => '_wte_is_front_page',
		'meta_value' => '1',
		'number'     => 1,
	] );
	if ( ! empty( $pages ) ) {
		return (int) $pages[0]->ID;
	}

	// 4. スラッグ 'front-page' または 'home' のページを最終手段として検索
	$fallback = get_page_by_path( 'front-page' ) ?? get_page_by_path( 'home' );
	if ( $fallback instanceof WP_Post ) {
		return (int) $fallback->ID;
	}

	return 0;
}

function wte_get_business_details(): array {
	$page_id = wte_get_front_page_id();
	if ( ! $page_id ) return [];
	$raw = get_post_meta( $page_id, 'wte_business_details', true );
	if ( empty( $raw ) ) return [];
	$data = json_decode( $raw, true );
	if ( ! is_array( $data ) ) return [];
	// 空の項目（タイトルなし）を除外してから並び替え
	$data = array_filter( $data, fn( $item ) => ! empty( $item['title'] ) );
	usort( $data, fn( $a, $b ) => ( (int) ( $a['order'] ?? 0 ) ) - ( (int) ( $b['order'] ?? 0 ) ) );
	return array_values( $data );
}

function wte_get_faq_items(): array {
	$page_id = wte_get_front_page_id();
	if ( ! $page_id ) return [];
	$raw = get_post_meta( $page_id, 'wte_faq_items', true );
	if ( empty( $raw ) ) return [];
	$data = json_decode( $raw, true );
	if ( ! is_array( $data ) ) return [];
	// 空の項目（質問なし）を除外してから並び替え
	$data = array_filter( $data, fn( $item ) => ! empty( $item['question'] ) );
	usort( $data, fn( $a, $b ) => ( (int) ( $a['order'] ?? 0 ) ) - ( (int) ( $b['order'] ?? 0 ) ) );
	return array_values( $data );
}
