// 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'},
  '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'},
  // 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.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.'},
  // 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.'},
  // 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.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.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.collectRate':{vi:'Tỷ lệ thực thu',en:'Collection rate'},
  'fin.markReceived':{vi:'Xác nhận thu',en:'Mark received'},
};

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 });
