// echo_settings.jsx — ユーザー設定 (localStorage 永続)
// Echoの実験的機能トグルや、カレンダーソースの色など

const ECHO_SETTINGS_KEY = 'echo.settings.v1';

const ECHO_SETTINGS_DEFAULTS = {
  // 時刻マッチング: 投下時にその時刻に重なるカレンダーイベントを文脈として紐付ける
  timeMatching: false,
  // カレンダーイベントをTimelineに表示
  showCalendarInTimeline: true,
  // 予定カードの強調度 (soft / medium / strong)
  eventCardEmphasis: 'medium',
  // 投稿ボタン（FAB）の位置: 'right' | 'left'
  fabPosition: 'right',
  // タイムライン表示範囲 (起床〜就寝)。範囲外にイベントがある日はその日だけ自動拡張
  wakeHour: 6,
  sleepHour: 23,
  // 日付の切替時 (dayBreakHour)。この時刻より前に投下/発生したものは「前日」扱い。
  // 0 = 深夜0時で切替（従来動作）、5 = 朝5時までは前日、など
  dayBreakHour: 5,
  // ==== Ripen 実験機能（初期オフ）====
  // "完了圧" を生む機能は EXPERIMENTAL に移して初期オフ
  ripenShowPipeline: false,  // Ripening Pipeline（5ステージの流れ図＋タイプ別カウント）
  ripenShowOutcome: false,   // Outcome金額の合計表示
  ripenShowTypeView: false,  // タイプ別タブ（メモ/アイデア/タスク/アウトプット/成果）
};

// ソース自動カラーパレット (色覚バリアフリー寄り)
const SOURCE_COLORS = [
  '#2E7D52', // green (Echo primary)
  '#5B6CFF', // indigo
  '#E85D75', // coral
  '#D97706', // amber
  '#0EA5E9', // sky
  '#8B5CF6', // violet
  '#059669', // emerald
  '#DC2626', // red
];

function loadEchoSettings() {
  try {
    const raw = localStorage.getItem(ECHO_SETTINGS_KEY);
    if (!raw) return { ...ECHO_SETTINGS_DEFAULTS };
    return { ...ECHO_SETTINGS_DEFAULTS, ...JSON.parse(raw) };
  } catch (e) {
    return { ...ECHO_SETTINGS_DEFAULTS };
  }
}

function saveEchoSettings(s) {
  try { localStorage.setItem(ECHO_SETTINGS_KEY, JSON.stringify(s)); } catch (e) {}
}

// React hook: 設定の読み書き
function useEchoSettings() {
  const [settings, setSettingsState] = React.useState(loadEchoSettings);

  const setSettings = React.useCallback((patch) => {
    setSettingsState(prev => {
      const next = typeof patch === 'function' ? patch(prev) : { ...prev, ...patch };
      saveEchoSettings(next);
      // 他タブや他コンポーネントに通知
      window.dispatchEvent(new CustomEvent('echo:settings-changed', { detail: next }));
      return next;
    });
  }, []);

  // 他コンポーネントからの更新を受け取る
  React.useEffect(() => {
    const handler = (e) => setSettingsState(e.detail);
    window.addEventListener('echo:settings-changed', handler);
    return () => window.removeEventListener('echo:settings-changed', handler);
  }, []);

  return [settings, setSettings];
}

// ソースID (ファイル名＋ランダム) を生成
function genSourceId(name) {
  const safe = (name || 'cal').toLowerCase().replace(/[^a-z0-9]+/g, '-').slice(0, 24);
  return `src-${safe}-${Math.random().toString(36).slice(2, 6)}`;
}

function pickSourceColor(usedColors) {
  const unused = SOURCE_COLORS.filter(c => !usedColors.includes(c));
  if (unused.length > 0) return unused[0];
  return SOURCE_COLORS[usedColors.length % SOURCE_COLORS.length];
}

Object.assign(window, {
  ECHO_SETTINGS_KEY, ECHO_SETTINGS_DEFAULTS, SOURCE_COLORS,
  loadEchoSettings, saveEchoSettings, useEchoSettings,
  genSourceId, pickSourceColor,
});
