// i18n message catalog (zh / en). Values may contain {placeholder} tokens that
// are interpolated by the `t()` function in settings.tsx.

export type Lang = 'zh' | 'en';

const zh = {
  // Header
  'header.menu': '菜单',
  'header.sessionList': '会话列表',
  'header.switchCwd': '切换工作目录',
  'header.noCwd': '(未设置工作目录)',

  // Sidebar
  'sidebar.expand': '展开侧栏',
  'sidebar.collapse': '收起侧栏',
  'sidebar.newChat': '新建对话',
  'sidebar.search': '搜索会话',
  'sidebar.searchPlaceholder': '搜索会话…',
  'sidebar.recent': '最近会话',
  'sidebar.group': '分组',
  'sidebar.groupBy': '分组方式',
  'sidebar.groupNone': '默认',
  'sidebar.groupDate': '日期',
  'sidebar.loading': '加载中…',
  'sidebar.empty': '暂无会话',
  'sidebar.emptyInCwd': '该目录暂无会话',
  'sidebar.noMatch': '无匹配会话',
  'sidebar.msgCount': '{n} 条',
  'sidebar.sessionCount': '{n} 个会话',
  'sidebar.sessionCountFiltered': '{f} / {t} 个会话',
  'sidebar.noRecords': '无会话记录',
  'sidebar.settings': '设置',
  'sidebar.itemMenu': '更多操作',
  'sidebar.rename': '重命名',
  'sidebar.delete': '删除',

  // Rename dialog
  'rename.title': '重命名会话',
  'rename.placeholder': '会话名称',
  'rename.confirm': '保存',

  // Delete dialog
  'delete.title': '删除会话',
  'delete.confirm': '删除',
  'delete.body': '确定删除会话「{name}」吗?此操作不可撤销。',

  // Relative time
  'time.justNow': '刚刚',
  'time.minutesAgo': '{n}分钟前',
  'time.hoursAgo': '{n}小时前',
  'time.yesterday': '昨天',

  // Model selector
  'model.label': '模型',

  // Reasoning effort selector (DeepSeek V4 only)
  'effort.label': '强度',
  'effort.default': '默认',
  'effort.high': 'High',
  'effort.max': 'Max',

  // Chat
  'chat.startHint': '发送消息开始对话…',
  'chat.continueHint': '发送消息继续此会话',
  'chat.skillExpand': '展开查看',
  'chat.skillCollapse': '收起',
  'chat.continueSession': '继续会话 {id}(历史在 TUI/磁盘中)',
  'chat.inputPlaceholder': '输入消息,Enter 发送,Shift+Enter 换行…',
  'chat.stop': '停止',
  'chat.send': '发送',
  'chat.queue': '排队发送(当前回合结束后自动发送)',
  'chat.queued': '排队中',
  'chat.removeQueued': '移除',
  'chat.error': '[错误: {msg}]',
  'chat.connError': '[连接错误: {msg}]',

  // Input attach (+) menu
  'attach.menu': '添加',
  'attach.image': '上传图片',
  'attach.file': '上传文件',
  'attach.skill': '选择技能',
  'attach.imageSoon': '即将支持',
  'attach.removeImage': '移除图片',
  'attach.tooLarge': '图片不能超过 {mb}M,已自动忽略超限图片。',
  'attach.dismissError': '关闭提示',
  'attach.skillsEmpty': '暂无可用技能。在项目 .atomcode/skills/<名称>/SKILL.md 添加技能,或放到 ~/.atomcode/skills/ 全局共享。',
  'attach.skillsLoading': '加载中…',
  // File picker
  'filepicker.title': '选择文件',
  'filepicker.empty': '(空目录)',
  'filepicker.loading': '加载中…',
  'filepicker.noFiles': '(无文件)',

  // Tool rows
  'tool.waiting': '等待批准…',
  'tool.running': '运行中…',
  'tool.done': '完成',
  'tool.failed': '失败',
  'tool.args': '参数',
  'tool.output': '输出',

  // Settings panel
  'settings.title': '设置',
  'settings.theme': '主题',
  'settings.theme.light': '浅色',
  'settings.theme.dark': '深色',
  'settings.theme.system': '跟随系统',
  'settings.language': '语言',
  'settings.modelConfig': '模型配置',
  'settings.close': '关闭',
  'settings.loadFailed': '加载失败',
  'settings.loading': '加载中…',
  'settings.defaultProvider': '默认 Provider',
  'settings.defaultWorkdir': '默认工作目录',
  'settings.configFile': '配置文件',
  'settings.default': '默认',
  'settings.model': '模型',
  'settings.contextWindow': '上下文窗口',
  'settings.contextWindowLocked': 'AtomGit 模型的上下文窗口由平台固定,不可修改',
  'settings.apiKey': 'API Key',
  'settings.configured': '已配置',
  'settings.notConfigured': '未配置',
  'settings.providers': 'Providers',
  'settings.menuTheme': '主题设置',
  'settings.menuLang': '语言设置',
  'settings.menuModel': '模型配置',
  'settings.menuRemote': '远程访问',

  // Remote access (蒲公英 / Oray PGY) dialog
  'remote.title': '远程访问',
  'remote.intro': '通过蒲公英私有网络,从手机等设备安全访问本机 webui(虚拟局域网、不暴露公网)。',
  'remote.loading': '检测中…',
  'remote.ready': '已就绪,用手机扫码或打开下面的地址(手机需登录同一蒲公英账号、加入同一网络):',
  'remote.notReachable': '已检测到蒲公英,但 webui 仅绑定了本机。请在 TUI 运行 /webui --host {ip} 后刷新本页。',
  'remote.notConnected': '已安装蒲公英,但本机还没分配虚拟 IP。请在蒲公英客户端连接组网后,回到这里重新检测。',
  'remote.notInstalled': '未检测到蒲公英。请在本机与手机都安装蒲公英并登录同一账号、加入同一网络,然后回到这里。',
  'remote.installLink': '下载蒲公英',
  'remote.guide': '使用引导',
  'remote.copy': '复制链接',
  'remote.copied': '已复制',
  'remote.refresh': '重新检测',
  'remote.warnToken': '该链接包含访问令牌,等同于密码,请勿外传。',

  // Provider add/delete
  'settings.addModel': '添加模型',
  'settings.providerName': '名称',
  'settings.providerType': '类型',
  'settings.baseUrl': 'Base URL',
  'settings.apiKeyInput': 'API Key',
  'settings.setAsDefault': '设为默认',
  'settings.add': '添加',
  'settings.adding': '添加中…',
  'settings.edit': '编辑',
  'settings.editModel': '编辑模型',
  'settings.save': '保存',
  'settings.saving': '保存中…',
  'settings.apiKeyKeep': '留空则保留现有',
  'settings.updateFailed': '更新失败',
  'settings.delete': '删除',
  'settings.deleteTitle': '删除模型',
  'settings.deleteConfirm': '确定删除模型「{name}」?',
  'settings.addFailed': '添加失败',
  'settings.nameModelRequired': '名称和模型必填',
  'settings.allRequired': '请填写所有字段',
  'settings.nameExists': '模型名称已存在,请使用其他名称',

  // CWD picker
  'cwd.title': '切换工作目录',
  'cwd.affectsSession': '仅影响当前会话',
  'cwd.path': '路径',
  'cwd.jump': '跳转',
  'cwd.hintBefore': '支持',
  'cwd.hintAfter': '展开。下方可浏览子目录(GET /fs/list)。',
  'cwd.loading': '加载中…',
  'cwd.noSubdirs': '(无子目录)',
  'cwd.recentProjects': '最近项目',
  'cwd.current': '当前',
  'cwd.setDefault': '设为默认目录(重启后仍生效)',
  'cwd.newFolder': '新建文件夹',
  'cwd.folderName': '文件夹名称',
  'cwd.create': '创建',
  'cwd.createFailed': '创建失败',
  'cwd.cancel': '取消',
  'cwd.confirm': '确定',

  // Permission card
  'perm.title': '工具请求批准',
  'perm.args': '参数',
  'perm.deny': '拒绝',
  'perm.approve': '批准',
  'perm.alwaysAllow': '本会话总是允许',
  'perm.allowPersist': '永久允许此工具',

  // Sync toggle
  'sync.toggle': '同步当前会话',
  'sync.on': '已同步(多端实时)',
  'sync.off': '独立会话',

  // Common
  'common.readonly': '只读',
  'common.cancel': '取消',
} as const;

export type MsgKey = keyof typeof zh;

const en: Record<MsgKey, string> = {
  'header.menu': 'Menu',
  'header.sessionList': 'Session list',
  'header.switchCwd': 'Switch working directory',
  'header.noCwd': '(No working directory)',

  'sidebar.expand': 'Expand sidebar',
  'sidebar.collapse': 'Collapse sidebar',
  'sidebar.newChat': 'New chat',
  'sidebar.search': 'Search sessions',
  'sidebar.searchPlaceholder': 'Search sessions…',
  'sidebar.recent': 'Recent',
  'sidebar.group': 'Group',
  'sidebar.groupBy': 'Group by',
  'sidebar.groupNone': 'None',
  'sidebar.groupDate': 'Date',
  'sidebar.loading': 'Loading…',
  'sidebar.empty': 'No sessions',
  'sidebar.emptyInCwd': 'No sessions in this directory',
  'sidebar.noMatch': 'No matches',
  'sidebar.msgCount': '{n} msgs',
  'sidebar.sessionCount': '{n} sessions',
  'sidebar.sessionCountFiltered': '{f} / {t} sessions',
  'sidebar.noRecords': 'No session records',
  'sidebar.settings': 'Settings',
  'sidebar.itemMenu': 'More actions',
  'sidebar.rename': 'Rename',
  'sidebar.delete': 'Delete',

  'rename.title': 'Rename session',
  'rename.placeholder': 'Session name',
  'rename.confirm': 'Save',

  'delete.title': 'Delete session',
  'delete.confirm': 'Delete',
  'delete.body': 'Delete session “{name}”? This cannot be undone.',

  'time.justNow': 'just now',
  'time.minutesAgo': '{n} min ago',
  'time.hoursAgo': '{n} hr ago',
  'time.yesterday': 'yesterday',

  'model.label': 'Model',

  // Reasoning effort selector (DeepSeek V4 only)
  'effort.label': 'Effort',
  'effort.default': 'Default',
  'effort.high': 'High',
  'effort.max': 'Max',

  'chat.startHint': 'Send a message to start a conversation…',
  'chat.continueHint': 'Send a message to continue this session',
  'chat.skillExpand': 'Expand',
  'chat.skillCollapse': 'Collapse',
  'chat.continueSession': 'Continue session {id} (history on TUI/disk)',
  'chat.inputPlaceholder': 'Type a message — Enter to send, Shift+Enter for newline…',
  'chat.stop': 'Stop',
  'chat.send': 'Send',
  'chat.queue': 'Queue message (sent after the current turn finishes)',
  'chat.queued': 'Queued',
  'chat.removeQueued': 'Remove',
  'chat.error': '[Error: {msg}]',
  'chat.connError': '[Connection error: {msg}]',

  'attach.menu': 'Add',
  'attach.image': 'Upload image',
  'attach.file': 'Upload file',
  'attach.skill': 'Choose skill',
  'attach.imageSoon': 'Coming soon',
  'attach.removeImage': 'Remove image',
  'attach.tooLarge': 'Images must be under {mb}M; oversized images were skipped.',
  'attach.dismissError': 'Dismiss',
  'attach.skillsEmpty': 'No skills yet. Add one at .atomcode/skills/<name>/SKILL.md, or ~/.atomcode/skills/ to share globally.',
  'attach.skillsLoading': 'Loading…',
  'filepicker.title': 'Choose a file',
  'filepicker.empty': '(empty)',
  'filepicker.loading': 'Loading…',
  'filepicker.noFiles': '(no files)',

  'tool.waiting': 'Awaiting approval…',
  'tool.running': 'Running…',
  'tool.done': 'Done',
  'tool.failed': 'Failed',
  'tool.args': 'Arguments',
  'tool.output': 'Output',

  'settings.title': 'Settings',
  'settings.theme': 'Theme',
  'settings.theme.light': 'Light',
  'settings.theme.dark': 'Dark',
  'settings.theme.system': 'System',
  'settings.language': 'Language',
  'settings.modelConfig': 'Model configuration',
  'settings.close': 'Close',
  'settings.loadFailed': 'Load failed',
  'settings.loading': 'Loading…',
  'settings.defaultProvider': 'Default provider',
  'settings.defaultWorkdir': 'Default working directory',
  'settings.configFile': 'Config file',
  'settings.default': 'Default',
  'settings.model': 'Model',
  'settings.contextWindow': 'Context window',
  'settings.contextWindowLocked': 'Context window for AtomGit models is fixed by the platform and cannot be changed',
  'settings.apiKey': 'API Key',
  'settings.configured': 'Configured',
  'settings.notConfigured': 'Not configured',
  'settings.providers': 'Providers',
  'settings.menuTheme': 'Theme settings',
  'settings.menuLang': 'Language settings',
  'settings.menuModel': 'Model configuration',
  'settings.menuRemote': 'Remote access',

  'remote.title': 'Remote access',
  'remote.intro': 'Reach this webui from your phone or other devices over the 蒲公英 (Oray PGY) private network — a virtual LAN, nothing exposed publicly.',
  'remote.loading': 'Checking…',
  'remote.ready': 'Ready — scan the QR or open the URL below on your phone (it must be signed into the same 蒲公英 account and joined to the same network):',
  'remote.notReachable': '蒲公英 detected, but the webui is bound to localhost only. Run /webui --host {ip} in the TUI, then refresh this page.',
  'remote.notConnected': '蒲公英 is installed but this machine has no virtual IP yet. Connect it in the 蒲公英 client, then re-check here.',
  'remote.notInstalled': '蒲公英 not detected. Install 蒲公英 on both this machine and your phone, sign into the same account and join the same network, then come back.',
  'remote.installLink': 'Download 蒲公英',
  'remote.guide': 'Usage guide',
  'remote.copy': 'Copy link',
  'remote.copied': 'Copied',
  'remote.refresh': 'Re-check',
  'remote.warnToken': 'This link contains an access token — treat it like a password and do not share it.',

  // Provider add/delete
  'settings.addModel': 'Add model',
  'settings.providerName': 'Name',
  'settings.providerType': 'Type',
  'settings.baseUrl': 'Base URL',
  'settings.apiKeyInput': 'API Key',
  'settings.setAsDefault': 'Set as default',
  'settings.add': 'Add',
  'settings.adding': 'Adding…',
  'settings.edit': 'Edit',
  'settings.editModel': 'Edit provider',
  'settings.save': 'Save',
  'settings.saving': 'Saving…',
  'settings.apiKeyKeep': 'Leave blank to keep current',
  'settings.updateFailed': 'Update failed',
  'settings.delete': 'Delete',
  'settings.deleteTitle': 'Delete model',
  'settings.deleteConfirm': 'Delete model "{name}"?',
  'settings.addFailed': 'Add failed',
  'settings.nameModelRequired': 'Name and model are required',
  'settings.allRequired': 'Please fill in all fields',
  'settings.nameExists': 'Model name already exists, please use a different name',

  'cwd.title': 'Switch working directory',
  'cwd.affectsSession': 'Affects current session only',
  'cwd.path': 'Path',
  'cwd.jump': 'Go',
  'cwd.hintBefore': 'Supports',
  'cwd.hintAfter': 'expansion. Browse subdirectories below (GET /fs/list).',
  'cwd.loading': 'Loading…',
  'cwd.noSubdirs': '(No subdirectories)',
  'cwd.recentProjects': 'Recent projects',
  'cwd.current': 'Current',
  'cwd.setDefault': 'Set as default directory (persists across restarts)',
  'cwd.newFolder': 'New folder',
  'cwd.folderName': 'Folder name',
  'cwd.create': 'Create',
  'cwd.createFailed': 'Create failed',
  'cwd.cancel': 'Cancel',
  'cwd.confirm': 'Confirm',

  'perm.title': 'Tool approval request',
  'perm.args': 'Arguments',
  'perm.deny': 'Deny',
  'perm.approve': 'Approve',
  'perm.alwaysAllow': 'Always allow this session',
  'perm.allowPersist': 'Always allow this tool',

  // Sync toggle
  'sync.toggle': 'Sync current session',
  'sync.on': 'Synced (live)',
  'sync.off': 'Independent',

  'common.readonly': 'Read-only',
  'common.cancel': 'Cancel',
};

export const messages: Record<Lang, Record<MsgKey, string>> = { zh, en };