/**
 * @file    i18n.js
 * @brief   RTU Web Manager — 多语言国际化框架
 *
 * @details 预留式设计, 当前支持 zh (中文) / en (English),
 *          新增语言只需在 strings 对象中添加新语言键即可。
 *
 *          使用方式:
 *            t('nav.dashboard')   → 仪表盘 / Dashboard
 *            t(['out.signals', count]) → 开出信号 (20) / Out Signals (20)
 *
 *          语言切换:
 *            I18n.setLang('zh') / I18n.setLang('en')
 *            切换后写入 localStorage.rtu_lang 并刷新页面
 */

var I18n = {
	current: 'zh',

	strings: {

		/* ---- 简体中文 ---- */
		zh: {
			/* App */
			'app.title':        'RTU 管理系统',
			'app.version':      'RTU Web v3.0',

			/* Status */
			'status.connected':    '已连接',
			'status.disconnected': '已断开',
			'status.connecting':   '连接中…',

			/* Navigation */
			'nav.section.overview':   '概览',
			'nav.section.signal_mgmt': '信号管理',
			'nav.section.tools':      '工具',
			'nav.dashboard':     '仪表盘',
			'nav.out':           '开出信号',
			'nav.yk':            '遥控信号',
			'nav.ao':            '参数设置',
			'nav.param':         '定值管理',
			'nav.datacenter':    '数据中心',
			'nav.plc_debug':     'PLC 调试',
			'nav.plc_config':    'PLC 配置',
			'nav.monitor':       '实时监控',
			'nav.terminal':      '命令终端',

			/* Login */
			'login.title':     'RTU 管理系统',
			'login.username':  '用户名',
			'login.password':  '密码',
			'login.signin':    '登录',
			'login.error':     '用户名或密码错误 (admin/admin)',
			'login.success':   '登录成功',

			/* Dashboard */
			'dash.title':          '仪表盘',
			'dash.quick_actions':  '快捷操作',
			'dash.connection':     '连接信息',
			'dash.export_xml':     '导出全部 XML',
			'dash.import_xml':     '从 XML 导入',
			'dash.open_terminal':  '打开终端',
			'dash.open_monitor':   '打开监控',
			'dash.url':            '地址',
			'dash.status':         '状态',
			'dash.out.desc':       '开出信号注册',
			'dash.yk.desc':        '遥控信号管理',
			'dash.ao.desc':        '模拟输出参数',
			'dash.param.desc':     '定值区参数',

			/* Signals */
			'signal.add':        '添加',
			'signal.delete_sel': '批量删除',
			'signal.set':        '设置',
			'signal.delete':     '删除',
			'signal.no_data':    '暂无信号数据，请先添加',
			'signal.confirm_del': '确认删除信号',
			'signal.confirm_del_msg': '确定删除信号',
			'signal.confirm_batch_del': '确认批量删除',
			'signal.confirm_batch_msg': '确定删除选中的',
			'signal.add_title':  '添加信号',
			'signal.saddr':      '信号地址',
			'signal.desc':       '描述',
			'signal.type':       '数据类型',
			'signal.ctrl':       '控制类型',
			'signal.ctrl_direct': '直控',
			'signal.ctrl_sbo':    '选控 (SBO)',
			'signal.val':        '值',
			'signal.action':     '操作',
			'signal.set_title':  '设置数值',
			'signal.new_val':    '新值',
			'signal.zone':       '定值区',

			/* Datacenter */
			'dc.title':     '数据中心 — 信号浏览器',
			'dc.no_signal': '暂无信号数据',
			'dc.saddr':     '信号地址',
			'dc.desc':      '描述',
			'dc.type':      '类型',
			'dc.val':       '值',
			'dc.action':    '操作',
		'dc.refresh':   '刷 新',
		'dc.search_placeholder': '搜索 saddr/desc…',
		'dc.sel_count':  '已选 {n} 个信号',
		'dc.add_to_config': '添加到配置页',
		'dc.confirm_add': '确定将 {n} 个信号添加到',
		'dc.added':      '已发送 {n} 个添加请求',
		'dc.no_selected': '请先勾选要添加的信号',
		'dc.querying':   '正在从 RTU 查询数据中心…',
		'dc.refreshed':  '数据中心已刷新',
			'mon.recv':     '接收',

			/* Terminal */
			'term.title':   '命令终端',
			'term.placeholder': '输入命令…',
			'term.welcome': 'RTU 命令终端 — 输入 help 查看帮助\n\n',
			'term.prompt':  'rtu>',

			/* PLC */
			'plc_debug.title':  'PLC 调试 — 开出信号',
			'plc_debug.refresh': '通过 WebSocket 自动刷新',
			'plc_debug.led_col': '指示灯',
			'plc_debug.sig_col': '开出信号',
			'plc_debug.btn_col': '按键',
			'plc_debug.unbound': '未绑定',
			'plc_debug.no_led':  '暂无指示灯 — 点击 "+ LED" 添加',
			'plc_debug.no_btn':  '暂无按键 — 点击 "+ Button" 添加',
			'plc_debug.no_sig':  '暂无开出信号 — 请先在 Out 页面注册',
			'plc_debug.bind_title': '绑定开出信号',
			'plc_debug.toggle':  '翻转',
			'plc_debug.add_led':  '+ LED',
			'plc_debug.add_btn':  '+ Button',
			'plc_debug.del_sel':  '删除选中',
			'plc_debug.refresh_btn': '刷新',
			'plc_debug.to_led':  '→ LED',
			'plc_debug.to_btn':  '→ BTN',
			'plc_config.title': 'PLC 逻辑配置',
			'plc_config.file':   '配置文件: config/PLC/Reclose_logic.xml',
			'plc_config.add_input': '+输入',
			'plc_config.add_output': '+输出',
			'plc_config.load_xml':  '加载 XML',
			'plc_config.save_xml':  '保存 XML',
			'plc_config.clear':     '清空',
			'plc_config.delete':    '删除节点',
			'plc_config.zoom_in':   '放大',
			'plc_config.zoom_out':  '缩小',
			'plc_config.zoom_fit':  '适应',
			'plc_config.edit_title': '编辑节点',
			'plc_config.edit_save':  '保存',
			'plc_config.help': '点击节点选中 | 拖拽移动 | 点击输出圆点→点击输入圆点连线 | 滚轮缩放 | 拖拽空白区平移',

			/* Toast */
			'toast.val_required':  '请输入值',
			'toast.ws_error':     'WebSocket 未连接',
			'toast.saddr_required': '信号地址不能为空',
			'toast.add_sent':     '添加请求已发送',
			'toast.del_sent':     '已删除',
			'toast.batch_del_sent': '个信号已删除',
			'toast.set_sent':     '设置请求已发送',
			'toast.no_selected':  '请先选择信号',
			'toast.xml_exported': 'XML 已导出',
			'toast.no_export':    '无信号数据可导出',
			'toast.xml_importing': '正在导入信号…',
			'toast.xml_parse_error': 'XML 解析失败',
			'toast.xml_no_signals': '未找到信号元素',
			'toast.confirm':      '确认',
			'toast.cancel':       '取消',

			/* Language */
			'lang.label':   'Language',
		},

		/* ---- English ---- */
		en: {
			/* App */
			'app.title':        'RTU Web Manager',
			'app.version':      'RTU Web v3.0',

			/* Status */
			'status.connected':    'Connected',
			'status.disconnected': 'Disconnected',
			'status.connecting':   'Connecting…',

			/* Navigation */
			'nav.section.overview':   'Overview',
			'nav.section.signal_mgmt': 'Signal Management',
			'nav.section.tools':      'Tools',
			'nav.dashboard':     'Dashboard',
			'nav.out':           'Out Signals',
			'nav.yk':            'YK Controls',
			'nav.ao':            'AO Parameters',
			'nav.param':         'Param Settings',
			'nav.datacenter':    'Datacenter',
			'nav.plc_debug':     'PLC Debug',
			'nav.plc_config':    'PLC Config',
			'nav.monitor':       'Monitor',
			'nav.terminal':      'Terminal',

			/* Login */
			'login.title':     'RTU Web Manager',
			'login.username':  'Username',
			'login.password':  'Password',
			'login.signin':    'Sign In',
			'login.error':     'Invalid credentials (admin/admin)',
			'login.success':   'Login successful',

			/* Dashboard */
			'dash.title':          'Dashboard',
			'dash.quick_actions':  'Quick Actions',
			'dash.connection':     'Connection Info',
			'dash.export_xml':     'Export All to XML',
			'dash.import_xml':     'Import from XML',
			'dash.open_terminal':  'Open Terminal',
			'dash.open_monitor':   'Open Monitor',
			'dash.url':            'URL',
			'dash.status':         'Status',
			'dash.out.desc':       'Output signal registrations',
			'dash.yk.desc':        'Remote control signals',
			'dash.ao.desc':        'Analog output parameters',
			'dash.param.desc':     'Setting zone parameters',

			/* Signals */
			'signal.add':        'Add',
			'signal.delete_sel': 'Delete Selected',
			'signal.set':        'Set',
			'signal.delete':     'Delete',
			'signal.no_data':    'No signals registered. Use Add button above.',
			'signal.confirm_del': 'Confirm Delete',
			'signal.confirm_del_msg': 'Delete signal',
			'signal.confirm_batch_del': 'Confirm Batch Delete',
			'signal.confirm_batch_msg': 'Delete',
			'signal.add_title':  'Add Signal',
			'signal.saddr':      'Signal Address',
			'signal.desc':       'Description',
			'signal.type':       'Data Type',
			'signal.ctrl':       'Control Type',
			'signal.ctrl_direct': 'Direct',
			'signal.ctrl_sbo':    'SBO',
			'signal.val':        'Value',
			'signal.action':     'Action',
			'signal.set_title':  'Set Value',
			'signal.new_val':    'New Value',
			'signal.zone':       'Zone',

			/* Datacenter */
			'dc.title':     'Datacenter — Signal Explorer',
			'dc.no_signal': 'No signals found',
			'dc.saddr':     'SAddr',
			'dc.desc':      'Desc',
			'dc.type':      'Type',
			'dc.val':       'Value',
			'dc.action':    'Action',

			/* Monitor */
			'mon.title':    'WebSocket Traffic Monitor',
			'mon.clear':    'Clear',
			'mon.pause':    'Pause',
			'mon.resume':   'Resume',
			'mon.total':    'Total',
			'mon.sent':     'Sent',
			'mon.recv':     'Recv',

			/* Terminal */
			'term.title':   'Command Terminal',
			'term.placeholder': 'Enter command…',
			'term.welcome': 'RTU Command Terminal — Type \'help\' to start.\n\n',
			'term.prompt':  'rtu>',

			/* PLC */
			'plc_debug.title':  'PLC Debug — Out Signals',
			'plc_debug.refresh': 'Auto-refresh via WebSocket',
			'plc_debug.led_col': 'LED Indicators',
			'plc_debug.sig_col': 'Out Signals',
			'plc_debug.btn_col': 'Buttons',
			'plc_debug.unbound': 'Unbound',
			'plc_debug.no_led':  'No LEDs — click "+ LED" to add',
			'plc_debug.no_btn':  'No Buttons — click "+ Button" to add',
			'plc_debug.no_sig':  'No out signals — register first',
			'plc_debug.bind_title': 'Bind Out Signal',
			'plc_debug.toggle':  'Toggle',
			'plc_debug.add_led':  '+ LED',
			'plc_debug.add_btn':  '+ Button',
			'plc_debug.del_sel':  'Delete Selected',
			'plc_debug.refresh_btn': 'Refresh',
			'plc_debug.to_led':  '→ LED',
			'plc_debug.to_btn':  '→ BTN',
			'plc_config.title': 'PLC Logic Configuration',
			'plc_config.file':   'Config: config/PLC/Reclose_logic.xml',
			'plc_config.add_input': '+Input',
			'plc_config.add_output': '+Output',
			'plc_config.load_xml':  'Load XML',
			'plc_config.save_xml':  'Save XML',
			'plc_config.clear':     'Clear',
			'plc_config.delete':    'Delete',
			'plc_config.zoom_in':   'Zoom In',
			'plc_config.zoom_out':  'Zoom Out',
			'plc_config.zoom_fit':  'Fit',
			'plc_config.edit_title': 'Edit Node',
			'plc_config.edit_save':  'Save',
			'plc_config.help': 'Click node to select | Drag to move | Click output pin → input pin to wire | Scroll to zoom | Drag empty area to pan',

			/* Toast */
			'toast.val_required':  'Value required',
			'toast.ws_error':     'WebSocket not connected',
			'toast.saddr_required': 'Signal address is required',
			'toast.add_sent':     'Add request sent',
			'toast.del_sent':     'Deleted',
			'toast.batch_del_sent': 'signals deleted',
			'toast.set_sent':     'Set request sent',
			'toast.no_selected':  'No signals selected',
			'toast.xml_exported': 'XML exported',
			'toast.no_export':    'No signals to export',
			'toast.xml_importing': 'Importing signals…',
			'toast.xml_parse_error': 'XML parse error',
			'toast.xml_no_signals': 'No signal elements found',
			'toast.confirm':      'Confirm',
			'toast.cancel':       'Cancel',

			/* Language */
			'lang.label':   '语言',
		}
	},

	/* ---- API ---- */

	/**
	 * @brief 获取翻译字符串
	 * @param {string} key  翻译键
	 * @return 当前语言的翻译文本
	 */
	t: function(key) {
		var dict = this.strings[this.current];
		return (dict && dict[key]) ? dict[key] : (this.strings['en'][key] || key);
	},

	/**
	 * @brief 切换语言
	 * @param {string} lang  语言代码 ('zh' | 'en' | …)
	 */
	setLang: function(lang) {
		if (this.strings[lang]) {
			this.current = lang;
			localStorage.setItem('rtu_lang', lang);
			window.location.reload();
		}
	},

	/**
	 * @brief 初始化 — 加载用户偏好或自动检测浏览器语言
	 */
	init: function() {
		var saved = localStorage.getItem('rtu_lang');
		if (saved && this.strings[saved]) {
			this.current = saved;
		} else {
			var nav = (navigator.language || '').toLowerCase();
			this.current = (nav.indexOf('zh') === 0) ? 'zh' : 'en';
		}
	}
};
