/**
 * Session Logger (no-op ファサード)
 *
 * pocxr 本番は Vercel Postgres へセッション/イベント/エラーログを送信していたが、
 * NS には対応するテレメトリ REST が存在しないため全メソッドを no-op 化する
 * (計画書 §1.2.2 / §3.2(5))。`openai-realtime-connector.js` /
 * `ephemeral-token-manager.js` からの呼び出しを無改変にするため、
 * クラス名・メソッドシグネチャは維持する。
 */

class SessionLogger {
    constructor() {
        this.sessionId = null;
        this.isSessionCreated = false;
    }

    /**
     * セッションを開始 (no-op)。
     * @param {string} [_userId]
     * @returns {Promise<null>}
     */
    async startSession(_userId = null) {
        // ローカルの疑似セッションIDのみ発番する（isCreated()/getSessionId() の
        // 呼び出し元互換のため）。サーバーへの送信は行わない。
        this.sessionId = `local_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
        this.isSessionCreated = true;
        return this.sessionId;
    }

    /**
     * イベントを記録 (no-op)。
     */
    async logEvent(_eventType, _elapsedMs = null, _detail = null) {
        // no-op
    }

    /**
     * エラーを記録 (no-op)。
     */
    async logError(_phase, _errorCode = null, _message = null) {
        // no-op
    }

    /**
     * 接続完了を記録 (no-op)。
     */
    async markConnected(_connectDurationMs) {
        // no-op
    }

    /**
     * セッション終了を記録 (no-op)。
     */
    async endSession() {
        this.sessionId = null;
        this.isSessionCreated = false;
    }

    /**
     * セッション終了を記録 (sendBeacon版、no-op)。
     */
    endSessionBeacon() {
        this.sessionId = null;
        this.isSessionCreated = false;
    }

    /**
     * セッションIDを取得
     */
    getSessionId() {
        return this.sessionId;
    }

    /**
     * セッションが作成済みかどうか
     */
    isCreated() {
        return this.isSessionCreated;
    }

    /**
     * リセット（新しいセッション用）
     */
    reset() {
        this.sessionId = null;
        this.isSessionCreated = false;
    }
}

// シングルトンインスタンス
export const sessionLogger = new SessionLogger();

// 個別関数としてもエクスポート
export const startSession = (userId) => sessionLogger.startSession(userId);
export const logEvent = (eventType, elapsedMs, detail) => sessionLogger.logEvent(eventType, elapsedMs, detail);
export const logError = (phase, errorCode, message) => sessionLogger.logError(phase, errorCode, message);
export const markConnected = (connectDurationMs) => sessionLogger.markConnected(connectDurationMs);
export const endSession = () => sessionLogger.endSession();
export const getSessionId = () => sessionLogger.getSessionId();
export const resetSession = () => sessionLogger.reset();
