"use client";
import React, { createContext, useContext, useState, useEffect } from "react";

export type Language = "en" | "ko" | "ja";

export const translations = {
  en: {
    // Auth
    appName: "CheckFlow",
    tagline: "Your Personal Todo",
    welcomeBack: "Welcome back",
    signInSubtitle: "Sign in to your account",
    createAccount: "Create account",
    createAccountSubtitle: "Start organizing your tasks today",
    displayName: "Display Name",
    email: "Email",
    password: "Password",
    min8Chars: "Min. 8 characters",
    signIn: "Sign in",
    signingIn: "Signing in...",
    createBtn: "Create account",
    creatingBtn: "Creating account...",
    alreadyHaveAccount: "Already have an account?",
    dontHaveAccount: "Don't have an account?",
    tryDemoMode: "Try Demo Mode (No DB Required)",
    demoBadge: "Demo Mode",
    signOut: "Sign out",

    // Sidebar
    lists: "Lists",
    newList: "New List",
    listNamePlaceholder: "List name",
    create: "Create",
    cancel: "Cancel",
    save: "Save",
    deleteListConfirm: "Delete this list and all its tasks?",
    undoDelete: "Undo",
    listDeleted: "List deleted",
    importTasks: "Import Tasks",
    importModalTitle: "Import Tasks",
    targetList: "Target List",
    fileSelectLabel: "File (CSV or ICS from TickTick)",
    tickTickExportHint: "TickTick: Settings → Export → Export as CSV or iCalendar",
    importBtn: "Import",
    importing: "Importing...",
    exportTasks: "Export Tasks",
    exportModalTitle: "Export Tasks",
    exportFormat: "Format",
    exportScope: "Target List",
    allLists: "All Lists (Entire Tasks)",
    includeCompleted: "Include Completed Tasks",
    exportBtn: "Export & Download",
    exportSuccess: "Tasks exported successfully!",
    theme: "Theme",
    themeSystem: "System",
    themeLight: "Light",
    themeDark: "Dark",
    language: "Language",
    tags: "Tags",
    trash: "Trash",
    emptyTrash: "Empty Trash",
    searchPlaceholder: "Search tasks, notes, tags...",
    searchExpandedPlaceholder: "Search anything — tasks, notes, tags (Ctrl+K)...",

    // Settings Modal
    settingsModalTitle: "Settings",
    profile: "Profile",
    preferences: "Preferences",
    syncIntegrations: "Integrations (DAVx⁵)",
    admin: "Admin",
    trashRetention: "Trash Retention Period",
    trashRetentionHint: "Deleted tasks will be permanently removed after the specified period.",
    days7: "7 Days",
    days14: "14 Days",
    days30: "30 Days (Recommended)",
    neverDelete: "Never Auto-Delete",

    // CalDAV & Sync
    syncTitle: "Galaxy & External Sync (CalDAV)",
    syncDesc: "CheckFlow supports native two-way synchronization with Samsung Galaxy Reminder, Apple Reminders, and Thunderbird via CalDAV.",
    syncBaseUrl: "CalDAV Server Base URL",
    syncCopyUrl: "Copy URL",
    syncCopied: "Copied!",
    syncDownloadIcs: "Download .ICS Feed",
    syncTestConnection: "Test Endpoint",
    syncTesting: "Testing...",
    syncTestSuccess: "✓ CalDAV endpoint responded successfully (200 OK)",
    syncTabAndroid: "Galaxy / Android (DAVx⁵)",
    syncTabApple: "Apple Reminders (iOS / macOS)",
    syncTabThunderbird: "Thunderbird (Desktop)",
    syncAndroidStep1: "Install DAVx⁵ from Google Play Store or F-Droid.",
    syncAndroidStep2: "Open DAVx⁵ → Add Account → Select 'Login with URL and user name'.",
    syncAndroidStep3: "Paste the Base URL above, then enter your CheckFlow email & password.",
    syncAndroidStep4: "Enable 'VTODO (Tasks)' collection to sync with Samsung Reminder or OpenTasks.",
    syncAppleStep1: "Open Settings → Reminders → Accounts → Add Account.",
    syncAppleStep2: "Select 'Other' → Add CalDAV Account.",
    syncAppleStep3: "Server: paste base URL without protocol, User/Pass: CheckFlow credentials.",
    syncAppleStep4: "Toggle 'Reminders' ON and tap Save.",
    syncThunderbirdStep1: "Open Thunderbird → Switch to Calendar view → New Calendar.",
    syncThunderbirdStep2: "Select 'On the Network' → Format: CalDAV.",
    syncThunderbirdStep3: "Location: paste the Base URL, Username: CheckFlow email.",
    syncThunderbirdStep4: "Enter your password when prompted to finalize sync.",

    // Task List
    tasks: "Tasks",
    hideDone: "Hide done",
    showDone: "Show done",
    completedSection: "Completed",
    addTaskPlaceholder: "Add a task...",
    add: "Add",
    noTasksYet: "No tasks yet. Add one below!",
    selectListToStart: "Select a list to get started",
    loading: "Loading...",
    today: "Today",
    tomorrow: "Tomorrow",

    // Task Detail
    taskTitlePlaceholder: "Task title",
    priority: "Priority",
    priorityNone: "None",
    priorityLow: "Low",
    priorityMedium: "Medium",
    priorityHigh: "High",
    dueDate: "Due Date",
    clear: "Clear",
    notes: "Notes",
    notesPlaceholder: "Add notes, details, or anything you need to remember…\n\nMarkdown supported: **bold**, *italic*, # heading, - list, - [ ] checkbox",
    subtasks: "Sub-tasks",
    addSubtaskPlaceholder: "Add sub-task…",
    deleteTaskConfirm: "Delete this task?",
    autoSaved: "Auto-saved",
    saving: "Saving…",
    created: "Created",
    edited: "Edited",

    // Toolbars
    bold: "Bold",
    italic: "Italic",
    heading: "Heading",
    bulletList: "Bullet list",
    numberedList: "Numbered list",
    checkbox: "Checkbox",
    code: "Code",

    // TickTick Mode Switcher & Quick Add
    textMode: "Text Note Mode",
    subtaskMode: "Checklist Mode",
    switchToTextMode: "Switch to Markdown Note",
    switchToSubtaskMode: "Switch to Checklist Sub-tasks",
    moveToList: "Move to List",
    quickAdd: "Quick Add",
    quickToday: "Today",
    quickTomorrow: "Tomorrow",
    quickNextWeek: "Next Week",
    selectDate: "Date",
    selectPriority: "Priority",
    selectTag: "Tag",
    copied: "Copied!",

    // Context Menu
    editTask: "Edit",
    duplicateTask: "Duplicate",
    moveTask: "Move to…",
    deleteTask: "Delete",
    renameList: "Rename",
    deleteList: "Delete list",
    taskUndoHint: "Deleted. Tap to undo.",
    listUndoHint: "List deleted. Tap to undo.",

    // Labs, Kanban & Customization
    labs: "Labs",
    labsDesc: "Enable or disable experimental features individually.",
    kanbanView: "Kanban Board",
    listView: "List View",
    enableKanban: "Kanban Board View",
    enableKanbanDesc: "Switch between list and 3-column board (To Do / Doing / Done).",
    swapBlocks: "Swap Position",
    resetDefaults: "Reset to Defaults",
    resetConfirm: "Reset all UI customizations to factory defaults?",
    todoCol: "To Do",
    inProgressCol: "In Progress",
    doneCol: "Done",
    accessRestricted: "Access Restricted",
    adminRequired: "This console requires ADMIN role.",
  },

  ko: {
    // Auth
    appName: "CheckFlow",
    tagline: "나만의 할 일 관리, 심플하게",
    welcomeBack: "다시 돌아오셨네요 👋",
    signInSubtitle: "이메일로 로그인해주세요",
    createAccount: "새 계정 만들기",
    createAccountSubtitle: "오늘부터 할 일을 깔끔하게 정리해볼까요?",
    displayName: "이름 (닉네임)",
    email: "이메일",
    password: "비밀번호",
    min8Chars: "8자 이상 입력해주세요",
    signIn: "로그인",
    signingIn: "로그인 중이에요...",
    createBtn: "계정 만들기",
    creatingBtn: "계정 만드는 중...",
    alreadyHaveAccount: "이미 계정이 있으신가요?",
    dontHaveAccount: "아직 계정이 없으신가요?",
    tryDemoMode: "로그인 없이 체험해보기",
    demoBadge: "체험 중",
    signOut: "로그아웃",

    // Sidebar
    lists: "목록",
    newList: "새 목록",
    listNamePlaceholder: "목록 이름을 입력해주세요",
    create: "만들기",
    cancel: "취소",
    save: "저장",
    deleteListConfirm: "이 목록을 삭제할까요? 안에 있는 할 일도 모두 사라져요.",
    undoDelete: "되돌리기",
    listDeleted: "목록이 삭제됐어요",
    importTasks: "가져오기",
    importModalTitle: "할 일 가져오기",
    targetList: "가져올 목록 선택",
    fileSelectLabel: "파일 선택 (TickTick CSV 또는 ICS)",
    tickTickExportHint: "TickTick: 설정 → 데이터 내보내기 → CSV 또는 iCalendar",
    importBtn: "가져오기",
    importing: "가져오는 중이에요...",
    exportTasks: "내보내기",
    exportModalTitle: "할 일 내보내기",
    exportFormat: "내보내기 형식",
    exportScope: "내보낼 목록",
    allLists: "모든 목록 (전체 할 일)",
    includeCompleted: "완료된 항목 포함",
    exportBtn: "내보내기 및 다운로드",
    exportSuccess: "할 일을 성공적으로 내보냈어요!",
    theme: "테마",
    themeSystem: "시스템",
    themeLight: "라이트",
    themeDark: "다크",
    language: "언어",
    tags: "태그",
    trash: "휴지통",
    emptyTrash: "휴지통 비우기",
    searchPlaceholder: "검색...",
    searchExpandedPlaceholder: "할 일, 메모, 태그 무엇이든 검색해보세요 (Ctrl+K)...",

    // Settings Modal
    settingsModalTitle: "설정",
    profile: "프로필",
    preferences: "환경설정",
    syncIntegrations: "외부 연동 (CalDAV)",
    admin: "관리자",
    trashRetention: "휴지통 자동 비우기",
    trashRetentionHint: "설정한 기간이 지나면 휴지통이 자동으로 비워져요.",
    days7: "7일 후 자동 삭제",
    days14: "14일 후 자동 삭제",
    days30: "30일 후 자동 삭제 (권장)",
    neverDelete: "자동 삭제 안 함",

    // CalDAV & Sync
    syncTitle: "갤럭시 및 외부 캘린더 연동 (CalDAV)",
    syncDesc: "삼성 갤럭시 리마인더, 애플 미리알림, Thunderbird 등 CalDAV 표준을 지원하는 모든 기기와 양방향으로 동기화됩니다.",
    syncBaseUrl: "CalDAV 기본 주소 (Base URL)",
    syncCopyUrl: "URL 복사",
    syncCopied: "복사 완료!",
    syncDownloadIcs: ".ICS 피드 다운로드",
    syncTestConnection: "엔드포인트 점검",
    syncTesting: "점검 중...",
    syncTestSuccess: "✓ CalDAV 엔드포인트가 정상적으로 응답합니다 (200 OK)",
    syncTabAndroid: "갤럭시 / 안드로이드 (DAVx⁵)",
    syncTabApple: "애플 미리알림 (iOS / macOS)",
    syncTabThunderbird: "Thunderbird (PC)",
    syncAndroidStep1: "구글 플레이 스토어 또는 F-Droid에서 'DAVx⁵' 앱을 설치합니다.",
    syncAndroidStep2: "DAVx⁵ 실행 → 계정 추가(+) → 'URL 및 사용자 이름으로 로그인'을 선택합니다.",
    syncAndroidStep3: "위 기본 주소를 붙여넣고, CheckFlow 로그인 이메일과 비밀번호를 입력합니다.",
    syncAndroidStep4: "'VTODO (할 일)'을 켜면 삼성 리마인더 또는 OpenTasks와 자동으로 실시간 동기화됩니다.",
    syncAppleStep1: "기기 설정 → 미리알림(또는 캘린더) → 계정 → '계정 추가'를 탭합니다.",
    syncAppleStep2: "'기타' 선택 → 'CalDAV 계정 추가'를 누릅니다.",
    syncAppleStep3: "서버에 위 주소를 입력하고, 사용자 이름/비밀번호에 CheckFlow 계정 정보를 입력합니다.",
    syncAppleStep4: "'미리알림' 항목을 활성화하고 저장합니다.",
    syncThunderbirdStep1: "Thunderbird 실행 → 캘린더 탭으로 이동 → '새 캘린더'를 클릭합니다.",
    syncThunderbirdStep2: "'네트워크에 저장' 선택 → 형식: 'CalDAV'를 선택합니다.",
    syncThunderbirdStep3: "위치에 위 기본 주소를 붙여넣고, 사용자 이름에 CheckFlow 이메일을 입력합니다.",
    syncThunderbirdStep4: "인증 팝업이 뜨면 비밀번호를 입력하여 완료합니다.",

    // Task List
    tasks: "할 일",
    hideDone: "완료 숨기기",
    showDone: "완료 보기",
    completedSection: "완료한 항목",
    addTaskPlaceholder: "할 일을 추가해보세요...",
    add: "추가",
    noTasksYet: "아직 할 일이 없어요. 아래에서 추가해볼까요? 😊",
    selectListToStart: "왼쪽에서 목록을 선택해주세요",
    loading: "불러오는 중...",
    today: "오늘",
    tomorrow: "내일",

    // Task Detail
    taskTitlePlaceholder: "할 일 제목을 입력하세요",
    priority: "우선순위",
    priorityNone: "없음",
    priorityLow: "낮음",
    priorityMedium: "보통",
    priorityHigh: "높음",
    dueDate: "마감일",
    clear: "지우기",
    notes: "메모",
    notesPlaceholder: "여기에 자유롭게 메모하세요…\n\n마크다운도 쓸 수 있어요: **굵게**, *기울임*, # 제목, - 리스트, - [ ] 체크박스",
    subtasks: "하위 할 일",
    addSubtaskPlaceholder: "하위 할 일 추가…",
    deleteTaskConfirm: "이 할 일을 삭제할까요?",
    autoSaved: "자동 저장됨",
    saving: "저장 중…",
    created: "만든 날",
    edited: "수정한 날",

    // Toolbars
    bold: "굵게",
    italic: "기울임",
    heading: "제목",
    bulletList: "글머리 기호",
    numberedList: "번호 매기기",
    checkbox: "체크박스",
    code: "코드 블록",

    // TickTick Mode Switcher & Quick Add
    textMode: "텍스트 메모 모드",
    subtaskMode: "체크리스트 모드",
    switchToTextMode: "마크다운 메모 모드로 전환",
    switchToSubtaskMode: "체크리스트 모드로 전환",
    moveToList: "다른 목록으로 이동",
    quickAdd: "빠른 추가",
    quickToday: "오늘",
    quickTomorrow: "내일",
    quickNextWeek: "다음 주",
    selectDate: "날짜",
    selectPriority: "우선순위",
    selectTag: "태그",
    copied: "복사했어요!",

    // Context Menu
    editTask: "수정",
    duplicateTask: "복제",
    moveTask: "이동…",
    deleteTask: "삭제",
    renameList: "이름 변경",
    deleteList: "목록 삭제",
    taskUndoHint: "삭제했어요. 되돌릴 수 있어요.",
    listUndoHint: "목록이 삭제됐어요. 되돌릴 수 있어요.",

    // Labs, Kanban & Customization
    labs: "실험실 🧪",
    labsDesc: "아직 정식 출시 전인 기능들이에요. 원하는 걸 골라서 켜보세요!",
    kanbanView: "칸반 보드",
    listView: "리스트",
    enableKanban: "칸반 보드 뷰",
    enableKanbanDesc: "할 일을 보드 형태로 볼 수 있어요 (할 일 / 진행 중 / 완료).",
    swapBlocks: "순서 바꾸기",
    resetDefaults: "기본값으로 되돌리기",
    resetConfirm: "모든 커스텀 설정을 기본값으로 되돌릴까요?",
    todoCol: "할 일",
    inProgressCol: "진행 중",
    doneCol: "완료",
    accessRestricted: "접근 권한 없음",
    adminRequired: "이 페이지는 관리자만 볼 수 있어요.",
  },

  ja: {
    // Auth
    appName: "CheckFlow",
    tagline: "シンプルに、毎日のタスクを",
    welcomeBack: "おかえりなさい 👋",
    signInSubtitle: "メールアドレスでサインインしてください",
    createAccount: "アカウントを作成",
    createAccountSubtitle: "さあ、今日からタスクを整理しましょう！",
    displayName: "お名前",
    email: "メールアドレス",
    password: "パスワード",
    min8Chars: "8文字以上で入力してください",
    signIn: "サインイン",
    signingIn: "サインイン中...",
    createBtn: "アカウントを作成する",
    creatingBtn: "作成中...",
    alreadyHaveAccount: "すでにアカウントをお持ちですか？",
    dontHaveAccount: "アカウントをお持ちでないですか？",
    tryDemoMode: "ログインなしで試してみる",
    demoBadge: "体験中",
    signOut: "サインアウト",

    // Sidebar
    lists: "リスト",
    newList: "新しいリスト",
    listNamePlaceholder: "リスト名を入力してください",
    create: "作成する",
    cancel: "キャンセル",
    save: "保存",
    deleteListConfirm: "このリストを削除しますか？中のタスクもすべて消えます。",
    undoDelete: "元に戻す",
    listDeleted: "リストを削除しました",
    importTasks: "インポート",
    importModalTitle: "タスクをインポート",
    targetList: "インポート先のリスト",
    fileSelectLabel: "ファイルを選択（TickTick CSV または ICS）",
    tickTickExportHint: "TickTick: 設定 → エクスポート → CSV または iCalendar",
    importBtn: "インポートする",
    importing: "インポート中...",
    exportTasks: "エクスポート",
    exportModalTitle: "タスクをエクスポート",
    exportFormat: "エクスポート形式",
    exportScope: "対象リスト",
    allLists: "すべてのリスト（全体）",
    includeCompleted: "完了したタスクを含める",
    exportBtn: "エクスポートして保存",
    exportSuccess: "タスクをエクスポートしました！",
    theme: "テーマ",
    themeSystem: "システム",
    themeLight: "ライト",
    themeDark: "ダーク",
    language: "言語",
    tags: "タグ",
    trash: "ゴミ箱",
    emptyTrash: "ゴミ箱を空にする",
    searchPlaceholder: "検索...",
    searchExpandedPlaceholder: "タスク、メモ、タグなど何でも検索できます (Ctrl+K)...",

    // Settings Modal
    settingsModalTitle: "設定",
    profile: "プロフィール",
    preferences: "環境設定",
    syncIntegrations: "外部連携 (CalDAV)",
    admin: "管理者",
    trashRetention: "ゴミ箱の自動削除",
    trashRetentionHint: "設定した期間が過ぎると、ゴミ箱が自動的に空になります。",
    days7: "7日後に自動削除",
    days14: "14日後に自動削除",
    days30: "30日後に自動削除（推奨）",
    neverDelete: "自動削除しない",

    // CalDAV & Sync
    syncTitle: "Galaxy & 外部カレンダー連携 (CalDAV)",
    syncDesc: "Samsung Galaxy リマインダー、Apple リマインダー、Thunderbird など CalDAV 対応アプリと双方向同期できます。",
    syncBaseUrl: "CalDAV サーバー基本 URL",
    syncCopyUrl: "URL をコピー",
    syncCopied: "コピーしました！",
    syncDownloadIcs: ".ICS フィードをダウンロード",
    syncTestConnection: "接続テスト",
    syncTesting: "テスト中...",
    syncTestSuccess: "✓ CalDAV エンドポイントは正常に応答しています (200 OK)",
    syncTabAndroid: "Galaxy / Android (DAVx⁵)",
    syncTabApple: "Apple リマインダー (iOS / macOS)",
    syncTabThunderbird: "Thunderbird (PC)",
    syncAndroidStep1: "Google Play または F-Droid から「DAVx⁵」アプリをインストールします。",
    syncAndroidStep2: "DAVx⁵ を起動 → アカウント追加 →「URL とユーザー名でログイン」を選択します。",
    syncAndroidStep3: "上記の基本 URL を貼り付け、CheckFlow のメールアドレスとパスワードを入力します。",
    syncAndroidStep4: "「VTODO (タスク)」を有効にすると、Samsung リマインダーや OpenTasks と連携されます。",
    syncAppleStep1: "設定 → リマインダー → アカウント →「アカウントを追加」を開きます。",
    syncAppleStep2: "「その他」を選択 →「CalDAV アカウントを追加」を選択します。",
    syncAppleStep3: "サーバーに上記の URL、ユーザー名/パスワードに CheckFlow のアカウント情報を入力します。",
    syncAppleStep4: "「リマインダー」を有効にして保存します。",
    syncThunderbirdStep1: "Thunderbird を起動 → カレンダータブ → 新しいカレンダーを作成します。",
    syncThunderbirdStep2: "「ネットワーク上」を選択 → 形式: CalDAV を選択します。",
    syncThunderbirdStep3: "場所に上記の URL、ユーザー名に CheckFlow のメールアドレスを入力します。",
    syncThunderbirdStep4: "ログイン画面でパスワードを入力して完了します。",

    // Task List
    tasks: "タスク",
    hideDone: "完了を非表示",
    showDone: "完了を表示",
    completedSection: "完了済み",
    addTaskPlaceholder: "タスクを追加してみましょう...",
    add: "追加",
    noTasksYet: "まだタスクがありません。下から追加してみてください 😊",
    selectListToStart: "左側からリストを選んでください",
    loading: "読み込み中...",
    today: "今日",
    tomorrow: "明日",

    // Task Detail
    taskTitlePlaceholder: "タスク名を入力してください",
    priority: "優先度",
    priorityNone: "なし",
    priorityLow: "低め",
    priorityMedium: "普通",
    priorityHigh: "高め",
    dueDate: "期限",
    clear: "クリア",
    notes: "メモ",
    notesPlaceholder: "ここに自由にメモしてください…\n\nMarkdownも使えます: **太字**, *斜体*, # 見出し, - リスト, - [ ] チェックボックス",
    subtasks: "サブタスク",
    addSubtaskPlaceholder: "サブタスクを追加…",
    deleteTaskConfirm: "このタスクを削除しますか？",
    autoSaved: "自動保存しました",
    saving: "保存中…",
    created: "作成日",
    edited: "更新日",

    // Toolbars
    bold: "太字",
    italic: "斜体",
    heading: "見出し",
    bulletList: "箇条書き",
    numberedList: "番号付きリスト",
    checkbox: "チェックボックス",
    code: "コードブロック",

    // TickTick Mode Switcher & Quick Add
    textMode: "テキストメモ",
    subtaskMode: "チェックリスト",
    switchToTextMode: "Markdownメモに切り替え",
    switchToSubtaskMode: "チェックリストに切り替え",
    moveToList: "別のリストに移動",
    quickAdd: "クイック追加",
    quickToday: "今日",
    quickTomorrow: "明日",
    quickNextWeek: "来週",
    selectDate: "日付",
    selectPriority: "優先度",
    selectTag: "タグ",
    copied: "コピーしました！",
    accessRestricted: "アクセス制限",
    adminRequired: "このページは管理者のみ閲覧できます。",

    // Context Menu
    editTask: "編集",
    duplicateTask: "複製",
    moveTask: "移動…",
    deleteTask: "削除",
    renameList: "名前を変更",
    deleteList: "リストを削除",
    taskUndoHint: "削除しました。元に戻せます。",
    listUndoHint: "リストを削除しました。元に戻せます。",

    // Labs, Kanban & Customization
    labs: "実験室 🧪",
    labsDesc: "まだ正式リリース前の機能です。好きなものを選んでオンにしてみてください！",
    kanbanView: "カンバンボード",
    listView: "リスト",
    enableKanban: "カンバンボードビュー",
    enableKanbanDesc: "タスクをボード形式で表示できます（未着手 / 進行中 / 完了）。",
    swapBlocks: "順番を入れ替え",
    resetDefaults: "デフォルトに戻す",
    resetConfirm: "すべてのカスタム設定をデフォルトに戻しますか？",
    todoCol: "未着手",
    inProgressCol: "進行中",
    doneCol: "完了",
  },
};

type TranslationKeys = keyof typeof translations.en;

interface I18nContextType {
  lang: Language;
  setLang: (l: Language) => void;
  t: (key: TranslationKeys) => string;
}

const I18nContext = createContext<I18nContextType>({
  lang: "en",
  setLang: () => {},
  t: (k) => k,
});

const LANG_STORAGE_KEY = "checkflow_lang";

export function I18nProvider({ children }: { children: React.ReactNode }) {
  const [lang, setLangState] = useState<Language>("en");

  useEffect(() => {
    try {
      const saved = localStorage.getItem(LANG_STORAGE_KEY) as Language | null;
      if (saved && (saved === "en" || saved === "ko" || saved === "ja")) {
        setLangState(saved);
      }
    } catch {
      // ignore
    }
  }, []);

  const setLang = (l: Language) => {
    setLangState(l);
    try {
      localStorage.setItem(LANG_STORAGE_KEY, l);
    } catch {
      // ignore
    }
  };

  const t = (key: TranslationKeys): string => {
    const dict = (translations[lang] || translations.en) as Record<string, string>;
    return dict[key] || translations.en[key] || key;
  };

  return <I18nContext.Provider value={{ lang, setLang, t }}>{children}</I18nContext.Provider>;
}

export const useI18n = () => useContext(I18nContext);