/**
 * Debug Logger - デバッグモード制御付きログユーティリティ (console 専用)
 *
 * pocxr 本番はサーバーへのログ転送を持っていたが、NS には
 * 対応するテレメトリ REST が無いため console 出力のみに縮小する
 * (計画書 §1.2.2 / §3.2(5))。`createLogger()` の返すオブジェクトの
 * メソッド名は呼び出し元互換のため維持する。
 */

// Issue #453: 共通ユーティリティに集約
import { isIOS as detectIOS } from '../utils/browser-features.js';
const IS_IOS = detectIOS();

// デバッグモード設定（本番環境ではfalse）
// URLパラメータ ?debug=true でも有効化可能
const DEBUG_MODE = (() => {
    try {
        const urlParams = new URLSearchParams(window.location.search);
        return urlParams.get('debug') === 'true';
    } catch (e) {
        return false;
    }
})();

/**
 * デバッグログを出力
 * @param {string} prefix - ログのプレフィックス
 * @param  {...any} args - ログ引数
 */
export function debugLog(prefix, ...args) {
    if (DEBUG_MODE) {
        console.log(prefix, ...args);
    }
}

/**
 * デバッグ警告を出力
 * @param {string} prefix - ログのプレフィックス
 * @param  {...any} args - ログ引数
 */
export function debugWarn(prefix, ...args) {
    if (DEBUG_MODE) {
        console.warn(prefix, ...args);
    }
}

/**
 * エラーログを出力（常に出力）
 * @param {string} prefix - ログのプレフィックス
 * @param  {...any} args - ログ引数
 */
export function debugError(prefix, ...args) {
    // エラーは常に出力
    console.error(prefix, ...args);
}

/**
 * 特定のモジュール用のロガーを作成
 * @param {string} moduleName - モジュール名
 * @returns {Object} - log, warn, errorメソッドを持つオブジェクト
 */
export function createLogger(moduleName) {
    const prefix = `[${moduleName}]`;
    return {
        log: (...args) => debugLog(prefix, ...args),
        warn: (...args) => debugWarn(prefix, ...args),
        error: (...args) => debugError(prefix, ...args),
        isDebugMode: () => DEBUG_MODE,
        isServerLogMode: () => false,
        // 呼び出し元互換のため維持 (console 出力のみ、サーバー送信は無し)
        logImmediate: (...args) => {
            if (DEBUG_MODE) {
                console.log(prefix, ...args);
            }
        }
    };
}

// デバッグモードの状態をエクスポート
export const isDebugMode = DEBUG_MODE;
export const isServerLogMode = false;
// PR #538 v3 AI Review low 対応: browser-features.js の `isIOS` (関数) と
// 同名 boolean を export していると import 側で TypeError を生む可能性があるため
// 定数命名規則の IS_IOS_DEVICE で export し直す。
export const IS_IOS_DEVICE = IS_IOS;
