export default {
  common: {
    brand: 'Luminary',
    cancel: 'Cancel',
    confirm: 'Confirm',
    save: 'Save',
    edit: 'Edit',
    create: 'Create',
    add: 'Add',
    delete: 'Delete',
    refresh: 'Refresh',
    query: 'Search',
    copy: 'Copy',
    actions: 'Actions',
    name: 'Name',
    status: 'Status',
    type: 'Type',
    enabled: 'Enabled',
    disabled: 'Disabled',
    yes: 'Yes',
    no: 'No',
    all: 'All',
    loading: 'Loading...',
    empty: '(empty)',
    dash: '—',
    infinity: '∞',
    confirmDelete: 'Delete this item?',
    auto: 'Auto',
    detail: 'Details',
    model: 'Model',
    requests: 'Requests',
    tokens: 'Tokens',
    cost: 'Cost ($)',
    latencyMs: 'Latency (ms)',
    latency: 'Latency',
    stream: 'Stream',
    error: 'Error',
    time: 'Time',
    username: 'Username',
    password: 'Password',
    weight: 'Weight',
    priority: 'Priority',
    category: 'Category',
    budget: 'Budget',
    soon: 'Coming soon',
    whitelistMore: '{items} and {count} more',
    language: 'Language',
    zh: '中文',
    en: 'English',
  },
  nav: {
    dashboard: 'Dashboard',
    providers: 'Egress',
    ingress: 'Ingress',
    logs: 'Request Logs',
    ipRules: 'IP Rules',
    settings: 'Settings',
    security: 'Security',
    logout: 'Sign out',
  },
  login: {
    subtitle: 'AI Gateway Console',
    title: 'Sign in',
    username: 'Username',
    passwordPlaceholder: 'Enter password',
    submit: 'Sign in',
    footer: 'Luminary Gateway — unified AI egress & ingress management',
    success: 'Signed in successfully',
    failed: 'Sign in failed. Check username and password.',
    rateLimited: 'Too many attempts. Please try again later.',
    rateLimitedSec: 'Too many attempts. Try again in {sec} seconds.',
    ipBlocked: 'Your IP is not allowed to access the admin console. Check IP rules or contact an administrator.',
  },
  dashboard: {
    title: 'Dashboard',
    description: 'Real-time gateway requests, error rate, and provider health',
    requests24h: '24h Requests',
    tokens24h: '24h Tokens',
    errorRate: 'Error Rate',
    activeIngressKeys: 'Active Ingress Keys',
    requestTrend: '24h Request Trend',
    tokenTrend: '24h Token Trend',
    seriesRequests: 'Requests',
    seriesErrors: 'Errors',
    seriesTokens: 'Tokens',
    providerHealth: 'Provider Health',
    ingressTop5: 'Top 5 Ingress Keys',
    providerModelUsage: 'Provider + Model Usage (24h)',
    clientIpUsage: 'Client IP Usage (24h)',
    clientIp: 'Client IP',
    requestCount: 'Requests',
  },
  providers: {
    title: 'Egress Providers',
    description: 'Configure upstream providers, API paths, and keys',
    addProvider: 'Add Provider',
    protocolType: 'Protocol',
    baseUrl: 'Base URL',
    baseUrlPlaceholder: 'Leave empty for default',
    enabledEndpoints: 'Enabled Endpoints',
    models: 'Models',
    modelsEmpty: 'No models yet. Click Sync Models to pull from upstream.',
    displayName: 'Display Name',
    syncedAt: 'Synced At',
    addDialogTitle: 'Add Provider',
    endpointConfig: 'Endpoint Config',
    endpointConfigTitle: 'Endpoint Config — {name}',
    endpointDivider: 'Endpoints & Paths',
    endpointEditDivider: 'Enabled Endpoints & Path Overrides',
    pathHint: 'Path can be relative (based on Base URL) or a full http(s) URL',
    keysTitle: 'Keys — {name}',
    addKey: 'Add Key',
    addKeyDialogTitle: 'Add Provider Key',
    apiKey: 'API Key',
    modelWhitelist: 'Model Whitelist',
    modelWhitelistPlaceholder: '["*"] or gpt-4o-mini',
    maxRequestsPerDay: 'Max Requests / Day',
    maxTokensPerDay: 'Max Tokens / Day',
    requestsToday: 'Requests Today',
    modelsTitle: 'Models — {name}',
    syncModels: 'Sync Models',
    addModel: 'Add Model',
    addModelDialogTitle: 'Add Model',
    modelId: 'Model ID',
    ingressModelId: 'Ingress Model ID',
    ingressModelIdHint: 'Clients use this name in the version field of /v1/predictions',
    ingressModelIdRequired: 'Ingress Model ID is required',
    modelAlias: 'Ingress alias',
    modelAliasPlaceholder: 'Optional; ingress API uses this name',
    modelAliasHint: 'Leave empty to use upstream Model ID at ingress',
    upstreamModelId: 'Upstream Model ID',
    editModelDialogTitle: 'Edit model',
    providerNameExists: 'Provider name already exists',
    modelAliasExists: 'Model alias already exists',
    modelIdRequired: 'Model ID is required',
    modelAdded: 'Model added',
    modelDeleted: 'Model deleted',
    confirmDeleteModel: 'Delete this model?',
    modelsSummary: '{total} models, {enabled} enabled',
    modelsAction: 'Models',
    endpointsAction: 'Endpoints',
    keysAction: 'Keys',
    modelNotLoaded: 'Model data not loaded. Refresh and try again.',
    modelEnabled: 'Model enabled',
    modelDisabled: 'Model disabled',
    modelNotFound: 'Model not found. Sync models and try again.',
    updateFailed: 'Update failed',
    createSuccess: 'Created successfully',
    saved: 'Saved',
    deleted: 'Deleted',
    syncedCount: 'Synced {count} models',
    syncFailed: 'Sync failed',
    keyAdded: 'Key added',
  },
  ingress: {
    title: 'Ingress Keys',
    description: 'Create virtual keys with budget, rate limits, and routing',
    createKey: 'Create Ingress Key',
    keyPrefix: 'Key Prefix',
    providerWhitelist: 'Provider Whitelist',
    modelWhitelist: 'Model Whitelist',
    budgetLimit: 'Budget Limit',
    rpmLimit: 'RPM Limit',
    tpmLimit: 'TPM Limit',
    whitelistAction: 'Whitelist',
    routingAction: 'Routing',
    createDialogTitle: 'Create Ingress Key',
    providerWhitelistPlaceholder: 'Empty means all providers',
    modelWhitelistPlaceholder: 'Empty means all models',
    whitelistHint: 'Empty selection allows all',
    modelWhitelistHint: 'Empty allows all; sync models in Egress first',
    editWhitelistTitle: 'Edit Whitelist',
    plainKeyTitle: 'Save your key (shown once)',
    plainKeyWarning: 'Copy now — the full key cannot be viewed again after closing',
    routingTitle: 'Routing Rules — {name}',
    addRule: 'Add Rule',
    modelPattern: 'Model Pattern',
    modelPatternPlaceholder: 'gpt-4o* or claude-3-5-sonnet',
    providerId: 'Provider',
    providerIdPlaceholder: 'Select provider',
    keyIdOptional: 'Provider key',
    keyIdPlaceholder: 'Leave empty for auto load balancing',
    providerRequired: 'Please select a provider',
    addRuleTitle: 'Add Routing Rule',
    whitelistUpdated: 'Whitelist updated',
    confirmDeleteKey: 'Delete this key?',
    copied: 'Copied',
    ruleAdded: 'Rule added',
    protocol: 'Protocol',
    protocolText: 'Text (OpenAI)',
    protocolImage: 'Image (Replicate)',
    protocolHint: 'Text keys use /v1/chat/completions etc.; image keys use /v1/predictions and Replicate model listing',
    editKeyTitle: 'Edit Key',
    protocolUpdated: 'Key updated',
    apiDoc: 'API Docs',
  },
  logs: {
    title: 'Request Logs',
    description: 'Latest 500 records including inference and admin login',
    ingress: 'Ingress',
    endpoint: 'Endpoint',
    modelOrUser: 'Model / User',
    modelOrUserPlaceholder: 'Model / username',
    clientIpPlaceholder: 'Client IP',
    statusSuccess: 'Success',
    statusError: 'Error',
    endpointAdminLogin: 'Admin Login',
    pagerHint: '{total} total, up to {max} retained',
    detailTitle: 'Request Details',
    requestBody: 'Request Body',
    responseBody: 'Response Body',
    predictionStatus: 'Prediction status',
  },
  ipRules: {
    title: 'IP Rules',
    description: 'Whitelist / blacklist for admin console and inference API',
    addRule: 'Add IP Rule',
    cidr: 'CIDR / IP',
    cidrPlaceholder: '192.168.1.0/24 or 127.0.0.1',
    scope: 'Scope',
    typeAllow: 'Allow',
    typeDeny: 'Deny',
    scopeProxy: 'Inference API',
    scopeAdmin: 'Admin Console',
    scopeAll: 'All (Admin + API)',
    allowWarning: 'Allow rules restrict admin access. Ensure your current IP is included.',
    added: 'Added',
  },
  settings: {
    title: 'Settings',
    description: 'All runtime parameters are managed here — no config file required',
    securitySession: 'Security & Session',
    gatewayMonitor: 'Gateway & Monitoring',
    changePassword: 'Change Admin Password',
    encryptionKey: 'Encryption Key',
    encryptionKeyPlaceholder: 'Leave empty to keep unchanged; must match old key to decrypt existing provider keys',
    encryptionKeyCurrent: 'Current: {hint}',
    sessionTtl: 'Session TTL (seconds)',
    loginMaxAttempts: 'Max Login Attempts',
    loginLockout: 'Login Lockout (seconds)',
    trustedProxies: 'Trusted Proxy IPs / CIDRs',
    trustedProxiesPlaceholder: 'One per line, e.g. 127.0.0.1 or 10.0.0.0/8',
    usageFlush: 'Usage Flush Interval (seconds)',
    healthCheck: 'Health Check Interval (seconds)',
    gatewayMaxRetries: 'Gateway Max Retries',
    retryBackoff: 'Retry Backoff (ms)',
    saveSettings: 'Save Settings',
    oldPassword: 'Current Password',
    newPassword: 'New Password',
    savePassword: 'Save Password',
    settingsSaved: 'Settings saved',
    passwordUpdated: 'Password updated',
  },
  apiDocs: {
    backToKeys: 'Back to Ingress Keys',
    authTitle: 'Authentication',
    authDesc: 'Send your ingress key (sk-lum-*) using either header:',
    baseUrl: 'Base URL',
    endpointsTitle: 'Endpoints',
    examplesTitle: 'Examples',
    method: 'Method',
    path: 'Path',
    summary: 'Summary',
    text: {
      title: 'Text API (OpenAI compatible)',
      description: 'For ingress keys with the Text protocol. Compatible with OpenAI SDKs.',
      note: 'Available endpoints depend on enabled egress endpoints. Empty whitelist means no provider/model restriction.',
      endpointRows: [
        { method: 'GET', path: '/v1/models', summary: 'List models (OpenAI format)', status: 'Supported' },
        { method: 'POST', path: '/v1/chat/completions', summary: 'Chat completions; SSE when stream: true', status: 'Supported' },
        { method: 'POST', path: '/v1/responses', summary: 'OpenAI Responses API', status: 'Supported' },
        { method: 'POST', path: '/v1/completions', summary: 'Legacy text completions', status: 'Supported' },
        { method: 'POST', path: '/v1/embeddings', summary: 'Embeddings', status: 'Supported' },
        { method: 'POST', path: '/v1/rerank', summary: 'Cohere-compatible rerank', status: 'Supported' },
      ],
      exampleRows: [
        {
          title: 'List models',
          code: 'curl {baseURL}/models \\\n  -H "Authorization: Bearer sk-lum-..."',
        },
        {
          title: 'Chat completion',
          code: 'curl {baseURL}/chat/completions \\\n  -H "Authorization: Bearer sk-lum-..." \\\n  -H "Content-Type: application/json" \\\n  -d \'{"model":"gpt-4o-mini","messages":[{"role":"user","content":"Hello"}]}\'',
        },
        {
          title: 'Embeddings',
          code: 'curl {baseURL}/embeddings \\\n  -H "Authorization: Bearer sk-lum-..." \\\n  -H "Content-Type: application/json" \\\n  -d \'{"model":"text-embedding-3-small","input":"hello"}\'',
        },
      ],
    },
    image: {
      title: 'Image API (Replicate compatible)',
      description: 'For ingress keys with the Image protocol. Async ComfyUI txt2img / img2img workflows.',
      note: 'Request field version accepts owner/name or short name (aligned with latest_version.id, owner, and name from the model list). See openapi_schema.components.schemas.Input for input fields. Outputs are signed URLs (/files/:id?exp=&sig=).',
      endpointRows: [
        { method: 'GET', path: '/v1/models', summary: 'List workflow models (Replicate format)', status: 'Supported' },
        { method: 'POST', path: '/v1/predictions', summary: 'Create async job; Prefer: wait for sync', status: 'Supported' },
        { method: 'GET', path: '/v1/predictions', summary: 'List jobs (cursor pagination)', status: 'Supported' },
        { method: 'GET', path: '/v1/predictions/:id', summary: 'Get job status and output', status: 'Supported' },
        { method: 'POST', path: '/v1/predictions/:id/cancel', summary: 'Cancel a running job', status: 'Supported' },
        { method: 'GET', path: '/v1/predictions/:id/stream', summary: 'SSE progress stream', status: 'Supported' },
      ],
      exampleRows: [
        {
          title: 'List workflow models',
          code: 'curl {baseURL}/models \\\n  -H "Authorization: Bearer sk-lum-..."',
        },
        {
          title: 'Create prediction',
          code: 'curl -X POST {baseURL}/predictions \\\n  -H "Authorization: Bearer sk-lum-..." \\\n  -H "Content-Type: application/json" \\\n  -d \'{"version":"luminary/flux-txt2img","input":{"prompt":"a cat"}}\'',
        },
      ],
    },
  },
}
