// i18n.jsx — language context. App hoists {lang,setLang}; everything reads
// strings via useLang().t('key'). Data objects shaped {vi,en} use tt(obj).
const LangContext = React.createContext(null);

const I18N = {
  // shell / nav
  'nav.overview':{vi:'Tổng quan',en:'Overview'},
  'nav.dashboard':{vi:'Bảng điều khiển',en:'Dashboard'},
  'nav.allApps':{vi:'Tất cả ứng dụng',en:'All apps'},
  'nav.workspace':{vi:'Không gian làm việc',en:'Workspace'},
  'nav.tasks':{vi:'Công việc',en:'Tasks'},
  'nav.approvals':{vi:'Phê duyệt',en:'Approvals'},
  'nav.notifs':{vi:'Thông báo',en:'Notifications'},
  'notif.markAll':{vi:'Đánh dấu đã đọc',en:'Mark all read'},
  'notif.unread':{vi:'Chưa đọc',en:'Unread'},
  'notif.empty':{vi:'Không có thông báo',en:'No notifications'},
  'nav.pinned':{vi:'Ứng dụng ghim',en:'Pinned apps'},
  'nav.admin':{vi:'Quản trị',en:'Administration'},
  'nav.adminConsole':{vi:'Bảng quản trị',en:'Admin console'},
  'nav.settings':{vi:'Cài đặt',en:'Settings'},
  'nav.help':{vi:'Trợ giúp',en:'Help'},
  'shell.backPortal':{vi:'Về Portal',en:'Back to Portal'},
  'shell.search':{vi:'Tìm kiếm…',en:'Search…'},
  'shell.allApps':{vi:'Tất cả ứng dụng',en:'All apps'},
  // roles
  'role.staff':{vi:'Nhân viên',en:'Staff'},
  'role.manager':{vi:'Quản lý',en:'Manager'},
  'role.admin':{vi:'Admin',en:'Admin'},
  'role.switch':{vi:'Vai trò',en:'Role'},
  // common
  'c.new':{vi:'Tạo mới',en:'New'},
  'c.create':{vi:'Tạo',en:'Create'},
  'c.save':{vi:'Lưu',en:'Save'},
  'c.cancel':{vi:'Hủy',en:'Cancel'},
  'c.send':{vi:'Gửi',en:'Send'},
  'c.edit':{vi:'Sửa',en:'Edit'},
  'c.delete':{vi:'Xóa',en:'Delete'},
  'c.close':{vi:'Đóng',en:'Close'},
  'c.search':{vi:'Tìm kiếm',en:'Search'},
  'c.filter':{vi:'Bộ lọc',en:'Filter'},
  'c.all':{vi:'Tất cả',en:'All'},
  'c.status':{vi:'Trạng thái',en:'Status'},
  'c.actions':{vi:'Thao tác',en:'Actions'},
  'c.details':{vi:'Chi tiết',en:'Details'},
  'c.overview':{vi:'Tổng quan',en:'Overview'},
  'c.list':{vi:'Danh sách',en:'List'},
  'c.report':{vi:'Báo cáo',en:'Report'},
  'c.settings':{vi:'Cài đặt',en:'Settings'},
  'c.owner':{vi:'Người phụ trách',en:'Owner'},
  'c.approve':{vi:'Duyệt',en:'Approve'},
  'c.reject':{vi:'Từ chối',en:'Reject'},
  'c.viewAll':{vi:'Xem tất cả',en:'View all'},
  'c.empty':{vi:'Chưa có dữ liệu',en:'No data yet'},
  'c.quickAction':{vi:'Thao tác nhanh',en:'Quick action'},
  'c.recent':{vi:'Hoạt động gần đây',en:'Recent activity'},
  // module: tasks (Công việc)
  'tk.new':{vi:'Thêm công việc',en:'New task'},
  'tk.board':{vi:'Bảng',en:'Board'},
  'tk.title':{vi:'Tiêu đề',en:'Title'},
  'tk.desc':{vi:'Mô tả',en:'Description'},
  'tk.due':{vi:'Hạn',en:'Due'},
  'tk.priority':{vi:'Ưu tiên',en:'Priority'},
  'tk.upcoming':{vi:'Sắp đến hạn',en:'Upcoming'},
  // status values
  'st.active':{vi:'Đang hoạt động',en:'Active'},
  'st.prospect':{vi:'Tiềm năng',en:'Prospect'},
  'st.inactive':{vi:'Ngừng',en:'Inactive'},
  // login
  'login.title':{vi:'Đăng nhập',en:'Sign in'},
  'login.sub':{vi:'Truy cập cổng nội bộ My S.W.O',en:'Access the My S.W.O portal'},
  'login.google':{vi:'Tiếp tục với Google',en:'Continue with Google'},
  'login.email':{vi:'Email công ty',en:'Work email'},
  'login.password':{vi:'Mật khẩu',en:'Password'},
  'login.remember':{vi:'Ghi nhớ đăng nhập',en:'Remember me'},
  'login.forgot':{vi:'Quên mật khẩu?',en:'Forgot password?'},
  'login.signin':{vi:'Đăng nhập',en:'Sign in'},
  'login.skip':{vi:'Demo nhanh →',en:'Quick demo →'},
  'login.demoTitle':{vi:'Trải nghiệm demo với vai trò',en:'Try the demo as'},
  'login.demoNote':{vi:'Môi trường demo — dữ liệu mẫu, tự do thao tác.',en:'Demo environment — sample data, feel free to explore.'},
  'demo.switchRole':{vi:'Chuyển vai trò',en:'Switch role'},
  'demo.notReady':{vi:'Demo chưa cấu hình Supabase',en:'Demo Supabase not configured'},
  'login.tagline':{vi:'Một cổng — mọi ứng dụng nội bộ.',en:'One portal — every internal app.'},
  'login.heroSub':{vi:'SSO, dashboard, và bộ ứng dụng vận hành Smart · Optimal · Simple.',en:'SSO, dashboard, and your Smart · Optimal · Simple ops suite.'},
  // pwa update
  'pwa.title':{vi:'Đã có bản cập nhật',en:'Update available'},
  'pwa.sub':{vi:'Tải lại để dùng phiên bản mới nhất.',en:'Reload to get the latest version.'},
  'pwa.update':{vi:'Cập nhật',en:'Update'},
  'pwa.later':{vi:'Để sau',en:'Later'},
  // dashboard
  'dash.hello':{vi:'Xin chào',en:'Welcome'},
  'dash.news':{vi:'Bảng tin nội bộ',en:'Company news'},
  'dash.approvals':{vi:'Chờ bạn duyệt',en:'Awaiting your approval'},
  'dash.tasks':{vi:'Việc của tôi',en:'My tasks'},
  'dash.agenda':{vi:'Lịch hôm nay',en:'Today'},
  'dash.pinned':{vi:'Ứng dụng ghim',en:'Pinned apps'},
  'dash.docs':{vi:'Tài liệu gần đây',en:'Recent documents'},
  'kpi.tasks':{vi:'Việc cần làm',en:'Open tasks'},
  'kpi.approvals':{vi:'Chờ duyệt',en:'Approvals'},
  'kpi.customers':{vi:'Khách hàng',en:'Customers'},
  'kpi.contacts':{vi:'Liên hệ',en:'Contacts'},
  // allapps / admin
  'apps.title':{vi:'Tất cả ứng dụng',en:'All apps'},
  'apps.sub':{vi:'Toàn bộ ứng dụng nội bộ, phân theo nhóm.',en:'Every internal app, grouped.'},
  'apps.pin':{vi:'Ghim',en:'Pin'},
  'apps.unpin':{vi:'Bỏ ghim',en:'Unpin'},
  'apps.open':{vi:'Mở',en:'Open'},
  'apps.noModule':{vi:'Ứng dụng mẫu (chưa có trong bản demo)',en:'Sample app (not in this demo)'},
  'admin.title':{vi:'Bảng quản trị',en:'Admin console'},
  'admin.apps':{vi:'Ứng dụng',en:'Applications'},
  'admin.log':{vi:'Nhật ký',en:'Audit log'},
  'admin.showPortal':{vi:'Hiển thị trên Portal',en:'Show on portal'},
  'admin.hint':{vi:'Tắt một ứng dụng sẽ ẩn nó khỏi mọi nơi, cho mọi vai trò.',en:'Hiding an app removes it everywhere, for every role.'},
  'admin.system':{vi:'Hệ thống',en:'System'},
  // system administration (branding)
  'sys.menu':{vi:'Quản trị hệ thống',en:'System administration'},
  'sys.identity':{vi:'Nhận diện thương hiệu',en:'Brand identity'},
  'sys.logoHint':{vi:'PNG/SVG hình vuông, tối đa 512KB. Bỏ trống để dùng mark chữ.',en:'Square PNG/SVG, max 512KB. Leave empty to use the text mark.'},
  'sys.upload':{vi:'Tải logo lên',en:'Upload logo'},
  'sys.useMark':{vi:'Dùng mark chữ',en:'Use text mark'},
  'sys.markText':{vi:'Chữ trên mark',en:'Mark text'},
  'sys.markHint':{vi:'Tối đa 4 ký tự (khi không dùng ảnh).',en:'Up to 4 characters (when no image).'},
  'sys.name':{vi:'Tên gọi ứng dụng',en:'App name'},
  'sys.desc':{vi:'Mô tả',en:'Description'},
  'sys.descHint':{vi:'Hiển thị ở màn đăng nhập. Bỏ trống để dùng mặc định.',en:'Shown on the login screen. Empty = default.'},
  'sys.colors':{vi:'Nhóm màu',en:'Color theme'},
  'sys.primary':{vi:'Màu chính',en:'Primary'},
  'sys.accent':{vi:'Màu nhấn',en:'Accent'},
  'sys.contact':{vi:'Thông tin liên hệ',en:'Contact'},
  'sys.email':{vi:'Email',en:'Email'},
  'sys.phone':{vi:'Điện thoại',en:'Phone'},
  'sys.address':{vi:'Địa chỉ',en:'Address'},
  'sys.footer':{vi:'Dòng bản quyền (footer)',en:'Copyright line (footer)'},
  'sys.company':{vi:'Thông tin công ty (trên chứng từ)',en:'Company info (on documents)'},
  'sys.companyHint':{vi:'Dùng cho báo giá, hợp đồng, giấy đề nghị thanh toán.',en:'Used on quotes, contracts & payment requests.'},
  'sys.docLogo':{vi:'Logo trên chứng từ',en:'Document logo'},
  'sys.docLogoHint':{vi:'Hiện ở góc trên báo giá/hợp đồng. Bỏ trống → dùng ký hiệu chữ.',en:'Shown on documents. Empty → letter mark.'},
  'sys.companyName':{vi:'Tên công ty',en:'Company name'},
  'sys.companyAddr':{vi:'Địa chỉ',en:'Address'},
  'sys.mst':{vi:'Mã số thuế',en:'Tax ID'},
  'sys.bankName':{vi:'Ngân hàng',en:'Bank'},
  'sys.bankAcc':{vi:'Số tài khoản',en:'Bank account'},
  'sys.docFont':{vi:'Font chữ trên chứng từ',en:'Document font'},
  'sys.preview':{vi:'Xem trước',en:'Preview'},
  'sys.save':{vi:'Lưu thay đổi',en:'Save changes'},
  'sys.reset':{vi:'Khôi phục mặc định',en:'Reset to default'},
  'sys.unsaved':{vi:'Có thay đổi chưa lưu',en:'Unsaved changes'},
  'sys.note':{vi:'Cấu hình áp dụng cho mọi người dùng trên thiết bị này (lưu cục bộ).',en:'Applies for every user on this device (stored locally).'},
  // module: mail
  'mail.compose':{vi:'Soạn email',en:'Compose'},
  'mail.sent':{vi:'Đã gửi',en:'Sent'},
  'mail.templates':{vi:'Mẫu email',en:'Templates'},
  'mail.to':{vi:'Người nhận',en:'To'},
  'mail.cc':{vi:'Cc',en:'Cc'},
  'mail.subject':{vi:'Tiêu đề',en:'Subject'},
  'mail.from':{vi:'Người gửi',en:'From'},
  'mail.template':{vi:'Chèn mẫu',en:'Insert template'},
  'mail.attach':{vi:'Đính kèm',en:'Attach'},
  'mail.sent.ok':{vi:'Đã gửi email',en:'Email sent'},
  // module: customers
  'cust.title':{vi:'Khách hàng',en:'Customers'},
  'cust.code':{vi:'Mã KH',en:'Code'},
  'cust.name':{vi:'Tên khách hàng',en:'Name'},
  'cust.short':{vi:'Tên viết tắt',en:'Short name'},
  'cust.lang':{vi:'Ngôn ngữ',en:'Language'},
  'cust.mst':{vi:'MST',en:'Tax ID'},
  'cust.address':{vi:'Địa chỉ',en:'Address'},
  'cust.lookup':{vi:'Tra cứu MST',en:'Lookup tax ID'},
  'cust.industry':{vi:'Ngành',en:'Industry'},
  'cust.country':{vi:'Quốc gia',en:'Country'},
  'cust.new':{vi:'Thêm khách hàng',en:'New customer'},
  'cust.autocode':{vi:'Tự sinh mã từ tên',en:'Auto-generate code'},
  'cust.codeLocked':{vi:'Mã sẽ bị khóa sau khi tạo',en:'Code is locked after creation'},
  'cust.dup':{vi:'Mã đã tồn tại',en:'Code already exists'},
  'cust.links':{vi:'Liên kết',en:'Linked records'},
  // module: contacts
  'ct.title':{vi:'Liên hệ',en:'Contacts'},
  'ct.dir':{vi:'Danh bạ',en:'Directory'},
  'ct.code':{vi:'Mã LH',en:'Code'},
  'ct.name':{vi:'Họ tên',en:'Name'},
  'ct.type':{vi:'Loại',en:'Type'},
  'ct.nationality':{vi:'Quốc tịch',en:'Nationality'},
  'ct.customer':{vi:'Khách hàng',en:'Customer'},
  'ct.history':{vi:'Lịch sử giao dịch',en:'Transaction history'},
  'ct.new':{vi:'Thêm liên hệ',en:'New contact'},
  'ct.title2':{vi:'Chức vụ',en:'Title'},
  // module: contracts
  'hd.title':{vi:'Hợp đồng',en:'Contracts'},
  'hd.new':{vi:'Tạo hợp đồng',en:'New contract'},
  'hd.code':{vi:'Mã hợp đồng',en:'Contract no.'},
  'hd.category':{vi:'Loại hợp đồng',en:'Category'},
  'hd.direction':{vi:'Chiều',en:'Direction'},
  'hd.party':{vi:'Đối tác',en:'Party'},
  'hd.vendor':{vi:'Nhà cung cấp',en:'Vendor'},
  'hd.signDate':{vi:'Ngày ký',en:'Sign date'},
  'hd.term':{vi:'Hiệu lực',en:'Term'},
  'hd.termType':{vi:'Loại hiệu lực',en:'Term type'},
  'hd.start':{vi:'Từ ngày',en:'From'},
  'hd.end':{vi:'Đến ngày',en:'To'},
  'hd.parties':{vi:'Bên đối tác',en:'Counterparty'},
  'hd.rep':{vi:'Người đại diện',en:'Representative'},
  'hd.address':{vi:'Địa chỉ',en:'Address'},
  'hd.items':{vi:'Sản phẩm / dịch vụ',en:'Products / services'},
  'hd.unit':{vi:'ĐVT',en:'Unit'},
  'hd.qty':{vi:'SL',en:'Qty'},
  'hd.price':{vi:'Đơn giá',en:'Unit price'},
  'hd.amount':{vi:'Thành tiền',en:'Amount'},
  'hd.vat':{vi:'VAT',en:'VAT'},
  'hd.subtotal':{vi:'Cộng',en:'Subtotal'},
  'hd.vatTotal':{vi:'Thuế VAT',en:'VAT'},
  'hd.total':{vi:'Tổng cộng',en:'Total'},
  'hd.schedule':{vi:'Lịch thanh toán',en:'Payment schedule'},
  'hd.installment':{vi:'Đợt',en:'No.'},
  'hd.dueDate':{vi:'Ngày thanh toán',en:'Due date'},
  'hd.condition':{vi:'Điều kiện',en:'Condition'},
  'hd.paid':{vi:'Đã thu',en:'Paid'},
  'hd.unpaid':{vi:'Chưa thu',en:'Unpaid'},
  'hd.markPaid':{vi:'Xác nhận đã thu',en:'Mark paid'},
  'hd.renew':{vi:'Gia hạn',en:'Renew'},
  'hd.value':{vi:'Giá trị HĐ',en:'Value'},
  'hd.expiringSoon':{vi:'Sắp hết hạn',en:'Expiring soon'},
  'hd.renewHint':{vi:'Hợp đồng sắp hết hạn — cần gia hạn',en:'Contract expiring — renewal needed'},
  'hd.daysLeft':{vi:'ngày còn lại',en:'days left'},
  'hd.genSchedule':{vi:'Chia đều',en:'Split evenly'},
  'hd.addItem':{vi:'Thêm dòng',en:'Add line'},
  // module: finance
  'fin.title':{vi:'Tài chính',en:'Finance'},
  'fin.overview':{vi:'Tổng quan',en:'Overview'},
  'fin.cashflow':{vi:'Dòng tiền',en:'Cash flow'},
  'fin.income':{vi:'Khoản thu',en:'Receivables'},
  'fin.expense':{vi:'Khoản chi',en:'Expenses'},
  'fin.forecast':{vi:'Dự báo doanh thu',en:'Revenue forecast'},
  'fin.totalIn':{vi:'Tổng thu',en:'Total in'},
  'fin.totalOut':{vi:'Tổng chi',en:'Total out'},
  'fin.balance':{vi:'Số dư',en:'Balance'},
  'fin.net':{vi:'Dòng tiền ròng',en:'Net'},
  'fin.cumulative':{vi:'Lũy kế',en:'Cumulative'},
  'fin.month':{vi:'Tháng',en:'Month'},
  'fin.expected':{vi:'Dự báo',en:'Forecast'},
  'fin.actual':{vi:'Thực thu',en:'Actual'},
  'fin.received':{vi:'Đã thu',en:'Received'},
  'fin.pending':{vi:'Chờ thu',en:'Pending'},
  'fin.newExpense':{vi:'Thêm khoản chi',en:'New expense'},
  'fin.cat':{vi:'Hạng mục',en:'Category'},
  'fin.desc':{vi:'Diễn giải',en:'Description'},
  'fin.fromContract':{vi:'Từ HĐ',en:'From contract'},
  'fin.collectRate':{vi:'Tỷ lệ thực thu',en:'Collection rate'},
  'fin.markReceived':{vi:'Xác nhận thu',en:'Mark received'},
  // contracts — chứng từ (payment request / báo giá PDF)
  'hd.payReq':{vi:'Yêu cầu thanh toán',en:'Payment request'},
  'hd.payReqShort':{vi:'Yêu cầu TT',en:'Request'},
  'hd.genPdf':{vi:'Tải PDF / In',en:'Download PDF / Print'},
  'hd.preview':{vi:'Xem trước chứng từ',en:'Document preview'},
  'hd.amountWords':{vi:'Số tiền bằng chữ',en:'Amount in words'},
  // module: products & services (sản phẩm & dịch vụ)
  'pr.title':{vi:'Sản phẩm & Dịch vụ',en:'Products & Services'},
  'pr.catalog':{vi:'Danh mục',en:'Catalog'},
  'pr.new':{vi:'Thêm sản phẩm',en:'New product'},
  'pr.code':{vi:'Mã SP',en:'Code'},
  'pr.sku':{vi:'Mã hàng (SKU)',en:'Item code (SKU)'},
  'pr.name':{vi:'Tên sản phẩm / dịch vụ',en:'Product / service'},
  'pr.category':{vi:'Nhóm',en:'Category'},
  'pr.price':{vi:'Giá hiện tại',en:'Current price'},
  'pr.cost':{vi:'Giá vốn',en:'Cost'},
  'pr.vendor':{vi:'Nhà cung cấp',en:'Vendor'},
  'pr.vat':{vi:'VAT %',en:'VAT %'},
  'pr.vatAmt':{vi:'Tiền VAT',en:'VAT amount'},
  'pr.totalVat':{vi:'Thành tiền',en:'Total (incl. VAT)'},
  'pr.trend':{vi:'Biến động',en:'Trend'},
  'pr.priceHistory':{vi:'Lịch sử giá',en:'Price history'},
  'pr.priceChanges':{vi:'SP đổi giá',en:'Price changes'},
  'pr.txHistory':{vi:'Lịch sử giao dịch',en:'Transaction history'},
  'pr.txCount':{vi:'Lượt giao dịch',en:'Transactions'},
  'pr.customers':{vi:'Khách hàng',en:'Customers'},
  'pr.makeQuote':{vi:'Tạo báo giá',en:'Create quote'},
  'pr.makeQuoteShort':{vi:'Báo giá',en:'Quote'},
  'pr.desc':{vi:'Mô tả',en:'Description'},
  // module: quotes (báo giá)
  'bg.title':{vi:'Báo giá',en:'Quotes'},
  'bg.new':{vi:'Tạo báo giá',en:'New quote'},
  'bg.code':{vi:'Số báo giá',en:'Quote no.'},
  'bg.issueDate':{vi:'Ngày báo giá',en:'Issue date'},
  'bg.validUntil':{vi:'Hiệu lực đến',en:'Valid until'},
  'bg.validDays':{vi:'Số ngày hiệu lực',en:'Valid (days)'},
  'bg.discount':{vi:'Chiết khấu',en:'Discount'},
  'bg.notes':{vi:'Ghi chú',en:'Notes'},
  'bg.value':{vi:'Giá trị báo giá',en:'Quote value'},
  'bg.send':{vi:'Gửi báo giá',en:'Send quote'},
  'bg.sendShort':{vi:'Gửi',en:'Send'},
  'bg.resend':{vi:'Gửi lại',en:'Resend'},
  'bg.sendNow':{vi:'Gửi ngay',en:'Send now'},
  'bg.openComposer':{vi:'Soạn trong Email',en:'Open in Email'},
  'bg.sentTo':{vi:'Đã gửi tới',en:'Sent to'},
  'bg.accept':{vi:'Khách đồng ý',en:'Mark agreed'},
  'bg.reject':{vi:'Khách từ chối',en:'Mark declined'},
  'bg.convert':{vi:'Chuyển thành hợp đồng',en:'Convert to contract'},
  'bg.converted':{vi:'Đã chuyển sang HĐ',en:'Converted to'},
  'bg.preview':{vi:'Xem trước báo giá',en:'Quote preview'},
  'bg.emailPreview':{vi:'Nội dung email',en:'Email content'},
  'bg.awaitingReply':{vi:'Chờ phản hồi',en:'Awaiting reply'},
  'bg.acceptRate':{vi:'Tỷ lệ chốt',en:'Win rate'},
  'bg.won':{vi:'Chốt không HĐ',en:'Won (no contract)'},
  'bg.closeWon':{vi:'Chốt không HĐ',en:'Close (no contract)'},
  'bg.closeWonHint':{vi:'Giá trị ≤ 10 triệu — có thể chốt trực tiếp, không cần lập hợp đồng.',en:'Value ≤ 10M VND — can close directly without a contract.'},
  'bg.needContract':{vi:'Giá trị > 10 triệu — NÊN lập hợp đồng trước khi triển khai (không bắt buộc).',en:'Value > 10M VND — a contract is recommended before delivery (not required).'},
  'bg.buy':{vi:'Báo giá mua',en:'Purchase quotes'},
  'bg.newBuy':{vi:'Ghi nhận BG mua',en:'Record quote'},
  'bg.wonNote':{vi:'Đã chốt đơn — không cần hợp đồng.',en:'Closed as won — no contract needed.'},
  // quy trình mua hàng (purchase flow)
  'flow.title':{vi:'Quy trình mua hàng',en:'Purchase workflow'},
  'flow.send':{vi:'Gửi báo giá',en:'Send quote'},
  'flow.confirm':{vi:'Xác nhận báo giá',en:'Confirm quote'},
  'flow.contract':{vi:'Lập hợp đồng',en:'Contract'},
  'flow.payreq':{vi:'Đề nghị thanh toán',en:'Payment request'},
  'flow.paid':{vi:'Xác nhận thanh toán',en:'Confirm payment'},
  'flow.warranty':{vi:'Kết thúc & bảo hành',en:'Close & warranty'},
  'flow.issue':{vi:'Xuất kho',en:'Issue stock'},
  'flow.deliver':{vi:'Giao hàng & nghiệm thu',en:'Deliver & accept'},
  'flow.pay':{vi:'Thanh toán',en:'Payment'},
  'flow.buyContract':{vi:'Hợp đồng mua',en:'Purchase order'},
  'flow.receive':{vi:'Nhập kho',en:'Receive stock'},
  'flow.payV':{vi:'Thanh toán NCC',en:'Pay vendor'},
  'flow.done':{vi:'Hoàn tất',en:'Done'},
  'flow.le10':{vi:'≤10tr · không cần HĐ',en:'≤10M · no contract'},
  'flow.recommend':{vi:'>10tr · nên có HĐ',en:'>10M · recommended'},
  'flow.recordBuy':{vi:'Ghi nhận báo giá',en:'Record quote'},
  'flow.approveBuy':{vi:'Duyệt mua',en:'Approve purchase'},
  'flow.rejected':{vi:'Khách từ chối',en:'Declined'},
  'flow.expired':{vi:'Đã hết hạn',en:'Expired'},
  // module: users & permissions
  'us.title':{vi:'Người dùng',en:'Users'},
  'us.invite':{vi:'Mời người dùng',en:'Invite user'},
  'us.name':{vi:'Họ tên',en:'Name'},
  'us.email':{vi:'Email',en:'Email'},
  'us.dept':{vi:'Phòng ban',en:'Department'},
  'us.role':{vi:'Vai trò',en:'Role'},
  'us.lastActive':{vi:'Hoạt động cuối',en:'Last active'},
  'us.joined':{vi:'Ngày tham gia',en:'Joined'},
  'us.directory':{vi:'Người dùng',en:'Users'},
  'us.roles':{vi:'Phân quyền',en:'Permissions'},
  'us.permissions':{vi:'Phân quyền',en:'Permissions'},
  'us.permMatrix':{vi:'Ma trận phân quyền',en:'Permission matrix'},
  'us.resource':{vi:'Chức năng',en:'Resource'},
  'us.newRole':{vi:'Tạo vai trò',en:'New role'},
  'us.systemRole':{vi:'Vai trò hệ thống',en:'System role'},
  'us.assignRole':{vi:'Gán vai trò',en:'Assign role'},
  'us.changeRole':{vi:'Đổi vai trò',en:'Change role'},
  'us.disable':{vi:'Vô hiệu hóa',en:'Disable'},
  'us.enable':{vi:'Kích hoạt',en:'Enable'},
  'us.resetPw':{vi:'Đặt lại mật khẩu',en:'Reset password'},
  'us.removeUser':{vi:'Xóa người dùng',en:'Remove user'},
  'us.profile':{vi:'Hồ sơ',en:'Profile'},
  'us.access':{vi:'Quyền truy cập',en:'Access'},
  'us.members':{vi:'thành viên',en:'members'},
  'us.permsOf':{vi:'Quyền của vai trò',en:'Permissions for'},
  'us.savePerms':{vi:'Lưu phân quyền',en:'Save permissions'},

  /* ---- Hỗ trợ sau bán (Support) ---- */
  'sp.title':{vi:'Hỗ trợ',en:'Support'},
  'sp.subtitle':{vi:'Ghi nhận & xử lý yêu cầu hỗ trợ sau bán theo quy trình.',en:'Track & resolve post-sale support requests.'},
  'sp.board':{vi:'Bảng quy trình',en:'Board'},
  'sp.tickets':{vi:'Ticket',en:'Tickets'},
  'sp.new':{vi:'Tạo ticket',en:'New ticket'},
  'sp.open':{vi:'Đang mở',en:'Open'},
  'sp.overdue':{vi:'Quá hạn',en:'Overdue'},
  'sp.empty':{vi:'Chưa có ticket',en:'No tickets yet'},
  'sp.code':{vi:'Mã',en:'Code'},
  'sp.titleField':{vi:'Tiêu đề',en:'Title'},
  'sp.customer':{vi:'Khách hàng',en:'Customer'},
  'sp.contract':{vi:'Hợp đồng',en:'Contract'},
  'sp.noContract':{vi:'Không gắn hợp đồng',en:'No contract'},
  'sp.channel':{vi:'Kênh',en:'Channel'},
  'sp.priority':{vi:'Ưu tiên',en:'Priority'},
  'sp.category':{vi:'Loại',en:'Category'},
  'sp.contact':{vi:'Liên hệ',en:'Contact'},
  'sp.assignee':{vi:'Phụ trách',en:'Assignee'},
  'sp.created':{vi:'Ngày tạo',en:'Created'},
  'sp.updated':{vi:'Cập nhật',en:'Updated'},
  'sp.sla':{vi:'Hạn xử lý (SLA)',en:'SLA due'},
  'sp.desc':{vi:'Mô tả',en:'Description'},
  'sp.result':{vi:'Kết quả xử lý',en:'Result'},
  'sp.report':{vi:'Báo cáo',en:'Report'},
  'sp.markResult':{vi:'Ghi nhận kết quả',en:'Record result'},
  'sp.interactions':{vi:'Diễn tiến',en:'Activity'},
  'sp.addNote':{vi:'Thêm ghi chú',en:'Add note'},
  'sp.advanceTo':{vi:'Chuyển tiếp',en:'Advance to'},
  'sp.reopen':{vi:'Mở lại',en:'Reopen'},

  /* ---- QR định danh hợp đồng ---- */
  'qr.tab':{vi:'QR hỗ trợ',en:'Support QR'},
  'qr.title':{vi:'QR định danh',en:'Identity QR'},
  'qr.desc':{vi:'QR định danh theo hợp đồng để khách quét và gửi yêu cầu hỗ trợ.',en:'Per-contract identity QR for customers to submit support requests.'},
  'qr.active':{vi:'Còn hiệu lực',en:'Active'},
  'qr.expired':{vi:'Hết hạn',en:'Expired'},
  'qr.token':{vi:'Mã định danh',en:'Token'},
  'qr.expiry':{vi:'Hết hạn',en:'Expiry'},
  'qr.daysLeft':{vi:'ngày còn lại',en:'days left'},
  'qr.scanHint':{vi:'Quét để mở biểu mẫu gửi yêu cầu hỗ trợ.',en:'Scan to open the support request form.'},
  'qr.copy':{vi:'Sao chép liên kết',en:'Copy link'},
  'qr.copied':{vi:'Đã sao chép liên kết',en:'Link copied'},
  'qr.print':{vi:'In',en:'Print'},
  'qr.renewNote':{vi:'Mã định danh gắn theo mã hợp đồng — giữ nguyên khi gia hạn.',en:'Token is bound to the contract code — preserved across renewals.'},
};

function LangProvider({ lang, setLang, children }) {
  const t = React.useCallback((key) => {
    const e = I18N[key]; if (!e) return key; return e[lang] || e.vi || key;
  }, [lang]);
  const tt = React.useCallback((obj) => {
    if (obj == null) return ''; if (typeof obj === 'string') return obj;
    return obj[lang] || obj.vi || obj.en || '';
  }, [lang]);
  return React.createElement(LangContext.Provider, { value:{ lang, setLang, t, tt } }, children);
}
function useLang(){ return React.useContext(LangContext); }

Object.assign(window, { LangProvider, useLang, I18N });
