"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",
    deleteListConfirm: "Delete this list and all its tasks?",
    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...",
    theme: "Theme",
    themeSystem: "System",
    themeLight: "Light",
    themeDark: "Dark",
    language: "Language",

    // 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",

    // Toolbars
    bold: "Bold",
    italic: "Italic",
    heading: "Heading",
    bulletList: "Bullet list",
    numberedList: "Numbered list",
    checkbox: "Checkbox",
    code: "Code",
  },
  ko: {
    // Auth
    appName: "CheckFlow",
    tagline: "나만의 똑똑한 할 일 관리",
    welcomeBack: "다시 오신 것을 환영합니다",
    signInSubtitle: "계정에 로그인하세요",
    createAccount: "계정 생성",
    createAccountSubtitle: "오늘부터 할 일을 체계적으로 정리해보세요",
    displayName: "이름 (닉네임)",
    email: "이메일",
    password: "비밀번호",
    min8Chars: "8자 이상 입력",
    signIn: "로그인",
    signingIn: "로그인 중...",
    createBtn: "계정 만들기",
    creatingBtn: "계정 생성 중...",
    alreadyHaveAccount: "이미 계정이 있으신가요?",
    dontHaveAccount: "계정이 없으신가요?",
    tryDemoMode: "체험 모드로 둘러보기 (DB 연결 불필요)",
    demoBadge: "체험 모드",
    signOut: "로그아웃",

    // Sidebar
    lists: "목록",
    newList: "새 목록",
    listNamePlaceholder: "목록 이름",
    create: "생성",
    cancel: "취소",
    deleteListConfirm: "이 목록과 포함된 모든 할 일을 삭제하시겠습니까?",
    importTasks: "할 일 가져오기 (Import)",
    importModalTitle: "할 일 가져오기",
    targetList: "저장할 목록",
    fileSelectLabel: "파일 선택 (TickTick CSV 또는 ICS)",
    tickTickExportHint: "TickTick: 설정 → 데이터 내보내기 → CSV 또는 iCalendar",
    importBtn: "가져오기",
    importing: "가져오는 중...",
    theme: "테마",
    themeSystem: "시스템 설정",
    themeLight: "라이트 모드",
    themeDark: "다크 모드",
    language: "언어",

    // 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: "하위 할 일 (Sub-tasks)",
    addSubtaskPlaceholder: "하위 할 일 추가…",
    deleteTaskConfirm: "이 할 일을 삭제하시겠습니까?",
    autoSaved: "자동 저장됨",
    saving: "저장 중…",
    created: "생성일",

    // Toolbars
    bold: "굵게",
    italic: "기울임",
    heading: "제목",
    bulletList: "글머리 기호",
    numberedList: "번호 매기기",
    checkbox: "체크박스",
    code: "코드 블록",
  },
  ja: {
    // Auth
    appName: "CheckFlow",
    tagline: "シンプルなタスク管理",
    welcomeBack: "おかえりなさい",
    signInSubtitle: "アカウントにサインイン",
    createAccount: "アカウント作成",
    createAccountSubtitle: "今日からタスクを整理しましょう",
    displayName: "お名前",
    email: "メールアドレス",
    password: "パスワード",
    min8Chars: "8文字以上",
    signIn: "サインイン",
    signingIn: "サインイン中...",
    createBtn: "アカウントを作成",
    creatingBtn: "作成中...",
    alreadyHaveAccount: "すでにアカウントをお持ちですか？",
    dontHaveAccount: "アカウントをお持ちでないですか？",
    tryDemoMode: "デモモードで試す (DB不要)",
    demoBadge: "デモモード",
    signOut: "サインアウト",

    // Sidebar
    lists: "リスト",
    newList: "新しいリスト",
    listNamePlaceholder: "リスト名",
    create: "作成",
    cancel: "キャンセル",
    deleteListConfirm: "このリストとすべてのタスクを削除しますか？",
    importTasks: "タスクのインポート",
    importModalTitle: "タスクのインポート",
    targetList: "対象リスト",
    fileSelectLabel: "ファイル選択 (TickTick CSV または ICS)",
    tickTickExportHint: "TickTick: 設定 → エクスポート → CSV または iCalendar",
    importBtn: "インポート",
    importing: "インポート中...",
    theme: "テーマ",
    themeSystem: "システム",
    themeLight: "ライト",
    themeDark: "ダーク",
    language: "言語",

    // 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: "作成日時",

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

interface I18nContextType {
  lang: Language;
  setLang: (lang: Language) => void;
  t: (key: keyof typeof translations["en"]) => string;
}

const I18nContext = createContext<I18nContextType>({
  lang: "en",
  setLang: () => {},
  t: (key) => translations.en[key] || (key as string),
});

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

  useEffect(() => {
    const saved = localStorage.getItem("checkflow_lang") as Language;
    if (saved && (saved === "en" || saved === "ko" || saved === "ja")) {
      setLangState(saved);
    } else {
      // Default to English as requested, or match browser if preferred
      const navLang = navigator.language.toLowerCase();
      if (navLang.startsWith("ko")) setLangState("ko");
      else if (navLang.startsWith("ja")) setLangState("ja");
      else setLangState("en");
    }
  }, []);

  const setLang = (newLang: Language) => {
    setLangState(newLang);
    localStorage.setItem("checkflow_lang", newLang);
  };

  const t = (key: keyof typeof translations["en"]): string => {
    return translations[lang]?.[key] || translations.en[key] || (key as string);
  };

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

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