/**
 * English Translations
 */
window.translations = window.translations || {};
window.translations.en = {
    dashboard: "Dashboard",
    models: "Models",
    accounts: "Accounts",
    logs: "Logs",
    settings: "Settings",
    online: "ONLINE",
    offline: "OFFLINE",
    totalAccounts: "TOTAL ACCOUNTS",
    active: "ACTIVE",
    operational: "Operational",
    rateLimited: "RATE LIMITED",
    quotasDepleted: "{count}/{total} Quotas Depleted",
    quotasDepletedTitle: "QUOTAS DEPLETED",
    outOfTracked: "Out of {total} Tracked",
    cooldown: "Cooldown",
    searchPlaceholder: "Search models...",
    allAccounts: "All Accounts",
    stat: "STAT",
    modelIdentity: "MODEL IDENTITY",
    globalQuota: "GLOBAL QUOTA",
    nextReset: "NEXT RESET",
    distribution: "ACCOUNT DISTRIBUTION",
    systemConfig: "System Configuration",
    language: "Language",
    pollingInterval: "Polling Interval",
    maxDisplayLogs: "Max Displayed Logs",
    showExhausted: "Show Exhausted Models",
    showExhaustedDesc: "Display models even if they have 0% remaining quota.",
    compactMode: "Compact Mode",
    compactModeDesc: "Reduce padding in tables for higher information density.",
    saveChanges: "Save Changes",
    autoScroll: "Auto-scroll",
    clearLogs: "Clear Logs",
    accountManagement: "Account Management",
    manageTokens: "Manage Google Account tokens and authorization states",
    addAccount: "Add Account",
    status: "STATUS",
    enabled: "ENABLED",
    health: "STATUS",
    accountEmail: "ACCOUNT (EMAIL)",
    source: "SOURCE",
    projectId: "PROJECT ID",
    sessionState: "SESSION STATE",
    operations: "OPERATIONS",
    delete: "Delete",
    fix: "Fix",
    confirmDelete: "Are you sure you want to remove this account?",
    cannotDeleteDatabase: "Cannot delete: This account is from Antigravity database (read-only)",
    connectGoogle: "Connect Google Account",
    reauthenticated: "re-authenticated",
    added: "added",
    successfully: "successfully",
    accountAddedSuccess: "Account added successfully",
    accountReauthSuccess: "Account re-authenticated successfully",
    failedToGetAuthUrl: "Failed to get auth URL",
    failedToStartOAuth: "Failed to start OAuth flow",
    oauthInProgress: "OAuth in progress. Please complete authentication in the popup window...",
    family: "Family",
    model: "Model",
    activeSuffix: "Active",
    // Tabs
    tabInterface: "Interface",
    tabClaude: "Claude CLI",
    tabModels: "Models",
    tabServer: "Server Settings",
    // Dashboard
    linkedAccounts: "Linked Accounts",
    noSignal: "NO SIGNAL DETECTED",
    establishingUplink: "ESTABLISHING UPLINK...",
    goToAccounts: "Go to Accounts",
    // Settings - Models
    modelsDesc: "Configure model visibility, pinning, and request routing.",
    modelsPageDesc: "Real-time quota and status for all available models.",
    showHidden: "Show Hidden Models",
    hideHidden: "Hide Hidden Models",
    hiddenOn: "Hidden: ON",
    hiddenOff: "Hidden: OFF",
    modelId: "Model ID",
    actions: "Actions",
    pinToTop: "Pin to top",
    toggleVisibility: "Toggle Visibility",
    noModels: "NO MODELS DETECTED",
    modelMappingHint: "Server-side model routing. Claude Code users: see 'Claude CLI' tab for client-side setup.",
    modelMapping: "Mapping (Target Model ID)",
    // Settings - Claude
    proxyConnection: "Proxy Connection",
    modelSelection: "Model Selection",
    defaultModelAliases: "DEFAULT MODEL ALIASES",
    opusAlias: "Opus Alias",
    sonnetAlias: "Sonnet Alias",
    haikuAlias: "Haiku Alias",
    claudeSettingsAlertPrefix: "Settings below directly modify",
    claudeSettingsAlertSuffix: "Restart Claude CLI to apply.",
    applyToClaude: "Apply to Claude CLI",
    // Presets
    configPresets: "Configuration Presets",
    saveAsPreset: "Save as Preset",
    deletePreset: "Delete Preset",
    loadPreset: "Load preset into form",
    load: "Load",
    presetHint: "Select a preset to load it. Click \"Apply to Claude CLI\" to save changes.",
    presetLoaded: "Preset loaded. Click \"Apply to Claude CLI\" to save.",
    presetSaved: "Preset saved",
    presetDeleted: "Preset deleted",
    unsavedChangesTitle: "Unsaved Changes",
    unsavedChangesMessage: "Your current configuration doesn't match any saved preset. If you switch, your current unsaved settings will be lost.",
    loadAnyway: "Load Anyway",
    savePresetTitle: "Save Preset",
    savePresetDesc: "Save the current configuration as a reusable preset.",
    presetName: "Preset Name",
    presetNamePlaceholder: "e.g., My Work Setup",
    savePreset: "Save Preset",
    // Settings - Server
    port: "Port",
    uiVersion: "UI Version",
    debugMode: "Debug Mode",
    environment: "Environment",
    serverReadOnly: "Settings managed via config.json. Restart server to apply changes.",
    advancedSettings: "Advanced Settings",
    reloadConfigTitle: "Reload Account Config",
    reloadConfigDesc: "Force reload accounts.json from disk",
    reload: "Reload",
    // Config Specific
    primaryModel: "Primary Model",
    subAgentModel: "Sub-agent Model",
    advancedOverrides: "Default Model Overrides",
    opusModel: "Opus Model",
    sonnetModel: "Sonnet Model",
    haikuModel: "Haiku Model",
    authToken: "Auth Token",
    saveConfig: "Save to Claude CLI settings",
    envVar: "Env",
    // New Keys
    systemName: "ANTIGRAVITY",
    systemDesc: "CLAUDE PROXY SYSTEM",
    connectGoogleDesc: "Connect a Google Workspace account to increase your API quota limit. The account will be used to proxy Claude requests via Antigravity.",
    useCliCommand: "Use CLI Command",
    close: "Close",
    requestVolume: "Request Volume",
    filter: "Filter",
    all: "All",
    none: "None",
    noDataTracked: "No data tracked yet",
    selectFamilies: "Select families to display",
    selectModels: "Select models to display",
    noLogsMatch: "No logs match filter",
    connecting: "CONNECTING",
    main: "Main",
    system: "System",
    refreshData: "Refresh Data",
    connectionLost: "Connection Lost",
    lastUpdated: "Last Updated",
    grepLogs: "grep logs...",
    noMatchingModels: "No matching models",
    typeToSearch: "Type to search or select...",
    or: "OR",
    refreshingAccount: "Refreshing {email}...",
    refreshedAccount: "Refreshed {email}",
    refreshFailed: "Refresh failed",
    accountToggled: "Account {email} {status}",
    toggleFailed: "Toggle failed",
    reauthenticating: "Re-authenticating {email}...",
    authUrlFailed: "Failed to get auth URL",
    deletedAccount: "Deleted {email}",
    deleteFailed: "Delete failed",
    accountsReloaded: "Accounts reloaded",
    reloadFailed: "Reload failed",
    claudeConfigSaved: "Claude configuration saved",
    claudeConfigRestored: "Claude CLI restored to defaults",
    saveConfigFailed: "Failed to save configuration",
    restoreConfigFailed: "Failed to restore configuration",
    restoreDefault: "Restore Default",
    confirmRestoreTitle: "Confirm Restore",
    confirmRestoreMessage: "Are you sure you want to restore Claude CLI to default settings? This will remove proxy configuration.",
    confirmRestore: "Confirm Restore",
    claudeActive: "Claude Active",
    claudeEmpty: "Claude Empty",
    geminiActive: "Gemini Active",
    geminiEmpty: "Gemini Empty",
    synced: "SYNCED",
    syncing: "SYNCING...",
    // Time range labels
    last1Hour: "Last 1H",
    last6Hours: "Last 6H",
    last24Hours: "Last 24H",
    last7Days: "Last 7D",
    allTime: "All Time",
    groupBy: "Group By",
    // Additional
    reloading: "Reloading...",
    reloaded: "Reloaded",
    lines: "lines",
    enabledSeeLogs: "Enabled (See Logs)",
    production: "Production",
    configSaved: "Configuration Saved",
    enterPassword: "Enter Web UI Password:",
    ready: "READY",
    depleted: "Depleted",
    timeH: "H",
    timeM: "M",
    familyClaude: "Claude",
    familyGemini: "Gemini",
    familyOther: "Other",
    enabledStatus: "enabled",
    disabledStatus: "disabled",
    logLevelInfo: "INFO",
    logLevelSuccess: "SUCCESS",
    logLevelWarn: "WARN",
    logLevelError: "ERR",
    totalColon: "Total:",
    todayColon: "Today:",
    hour1Colon: "1H:",
    frequentModels: "Frequent",
    smartTitle: "Auto-select top 5 most used models (24h)",
    activeCount: "{count} Active",
    allCaps: "ALL",
    claudeCaps: "CLAUDE",
    geminiCaps: "GEMINI",
    modelMapping: "Mapping (Target Model ID)",
    systemInfo: "System Information",
    refresh: "Refresh",
    runtimeConfig: "Runtime Configuration",
    debugDesc: "Enable detailed logging (See Logs tab)",
    networkRetry: "Network Retry Settings",
    maxRetries: "Max Retries",
    retryBaseDelay: "Retry Base Delay (ms)",
    retryMaxDelay: "Retry Max Delay (ms)",
    persistentSessions: "Persistent Sessions",
    persistTokenDesc: "Save OAuth sessions to disk for faster restarts",
    rateLimiting: "Account Rate Limiting & Timeouts",
    defaultCooldown: "Default Cooldown",
    defaultCooldownDesc: "Fallback cooldown when API doesn't provide a reset time.",
    maxWaitThreshold: "Max Wait Before Error",
    maxWaitDesc: "If all accounts are rate-limited longer than this, error immediately instead of waiting.",
    // Quota Protection
    quotaProtection: "Quota Protection",
    minimumQuotaLevel: "Minimum Quota Level",
    minimumQuotaLevelDesc: "Switch accounts when quota drops below this level. Per-account overrides take priority.",
    quotaDisabled: "Disabled",
    // Error Handling Tuning
    errorHandlingTuning: "Error Handling Tuning",
    rateLimitDedupWindow: "Rate Limit Dedup Window",
    rateLimitDedupWindowDesc: "Prevents concurrent retry storms when multiple requests hit rate limits simultaneously.",
    maxConsecutiveFailures: "Max Consecutive Failures",
    maxConsecutiveFailuresDesc: "Number of consecutive failures before applying extended cooldown to an account.",
    extendedCooldown: "Extended Cooldown",
    extendedCooldownDesc: "Cooldown duration applied after max consecutive failures reached.",
    maxCapacityRetries: "Max Capacity Retries",
    maxCapacityRetriesDesc: "Maximum retries for capacity exhaustion before switching accounts.",
    saveConfigServer: "Save Configuration",
    serverRestartAlert: "Changes saved to {path}. Restart server to apply some settings.",
    changePassword: "Change WebUI Password",
    changePasswordDesc: "Update the password for accessing this dashboard",
    currentPassword: "Current Password",
    newPassword: "New Password",
    confirmNewPassword: "Confirm New Password",
    passwordEmptyDesc: "Leave empty if no password set",
    passwordLengthDesc: "At least 6 characters",
    passwordConfirmDesc: "Re-enter new password",
    cancel: "Cancel",
    passwordsNotMatch: "Passwords do not match",
    passwordTooShort: "Password must be at least 6 characters",
    // Dashboard drill-down
    clickToViewAllAccounts: "Click to view all accounts",
    clickToViewModels: "Click to view Models page",
    clickToViewLimitedAccounts: "Click to view rate-limited accounts",
    clickToFilterClaude: "Click to filter Claude models",
    clickToFilterGemini: "Click to filter Gemini models",
    // Accounts page
    searchAccounts: "Search accounts...",
    noAccountsYet: "No Accounts Yet",
    noAccountsDesc: "Get started by adding a Google account via OAuth, or use the CLI command to import credentials.",
    addFirstAccount: "Add Your First Account",
    noSearchResults: "No accounts match your search",
    clearSearch: "Clear Search",
    disabledAccountsNote: "<strong>Disabled accounts</strong> will not be used for request routing but remain in the configuration. Dashboard statistics only include enabled accounts.",
    dangerousOperation: "⚠️ Dangerous Operation",
    confirmDeletePrompt: "Are you sure you want to delete account",
    deleteWarning: "⚠️ This action cannot be undone. All configuration and historical records will be permanently deleted.",
    // OAuth progress
    oauthWaiting: "Waiting for OAuth authorization...",
    oauthWaitingDesc: "Please complete the authentication in the popup window. This may take up to 2 minutes.",
    oauthCancelled: "OAuth authorization cancelled",
    oauthTimeout: "⏱️ OAuth authorization timed out. Please try again.",
    oauthWindowClosed: "OAuth window was closed. Authorization may be incomplete.",
    cancelOAuth: "Cancel",
    // MCP CLI & Gemini 1M
    mcpCliExperimental: "Experimental MCP CLI",
    mcpCliDesc: "Enables experimental MCP integration for reliable tool usage with reduced context consumption.",
    gemini1mMode: "Gemini 1M Context Mode",
    gemini1mDesc: "Appends [1m] suffix to Gemini models for 1M context window support.",
    gemini1mWarning: "⚠ Large context may reduce Gemini-3-Pro performance.",
    clickToSet: "Click to configure...",
    none: "None",
    // Quota Distribution
    quotaDistribution: "Quota Distribution",
    resetsIn: "Resets in {time}",
    noQuotaData: "No quota data available for this account yet.",
    // Manual OAuth Mode
    manualMode: "Manual Mode",
    manualModeDesc: "(for environments where callback cannot reach)",
    authLinkLabel: "Authorization Link:",
    linkCopied: "Link copied to clipboard",
    pasteCallbackLabel: "Paste callback URL or code:",
    pasteCallbackPlaceholder: "http://localhost:51121/oauth-callback?code=... or 4/0xxx...",
    completeAuth: "Complete Authorization",
    authFailed: "Authorization failed",
    // Import/Export
    export: "Export",
    import: "Import",
    exportAccounts: "Export Accounts",
    importAccounts: "Import Accounts",
    exportSuccess: "Exported {count} accounts",
    exportFailed: "Export failed",
    importSuccess: "Import complete:",
    importFailed: "Import failed",
    // UI Elements
    pageTitle: "Antigravity Console",
    live: "Live",
    tier: "Tier",
    quota: "Quota",
    tierUltra: "Ultra",
    tierPro: "Pro",
    tierFree: "Free",
    menu: "Menu",
    github: "GitHub",
    noData: "No data",
    // Error Messages
    operationFailed: "Operation failed",
    unknownError: "Unknown error",
    presetNameRequired: "Preset name is required",
    saveFailed: "Save failed",
    failedToSavePreset: "Failed to save preset",
    noPresetSelected: "No preset selected",
    deletePresetConfirm: "Delete preset \"{name}\"?",
    failedToDeletePreset: "Failed to delete preset",
    failedToChangePassword: "Failed to change password",
    passwordChangedSuccess: "Password changed successfully",
    debugModeToggled: "Debug mode {status}",
    tokenCacheToggled: "Token cache {status}",
    failedToUpdateTokenCache: "Failed to update token cache",
    failedToUpdateDebugMode: "Failed to update debug mode",
    failedToRefreshAccount: "Failed to refresh account",
    failedToDeleteAccount: "Failed to delete account",
    failedToReloadAccounts: "Failed to reload accounts",
    failedToUpdateModelConfig: "Failed to update model config",
    fieldUpdated: "{displayName} updated to {value}",
    failedToUpdateField: "Failed to update {displayName}",
    // Account Selection Strategy
    accountSelectionStrategy: "Account Selection Strategy",
    selectionStrategy: "Selection Strategy",
    strategyStickyLabel: "Sticky (Cache Optimized)",
    strategyRoundRobinLabel: "Round Robin (Load Balanced)",
    strategyHybridLabel: "Hybrid (Smart Distribution)",
    strategyStickyDesc: "Stays on same account until rate-limited. Best for prompt caching.",
    strategyRoundRobinDesc: "Rotates to next account on every request. Maximum throughput.",
    strategyHybridDesc: "Smart selection based on health, tokens, and freshness.",
    strategyUpdated: "Strategy updated to: {strategy}",
    failedToUpdateStrategy: "Failed to update strategy",
    invalidStrategy: "Invalid strategy selected",
    // Validation Messages
    mustBeValidNumber: "{fieldName} must be a valid number",
    mustBeAtLeast: "{fieldName} must be at least {min}",
    mustBeAtMost: "{fieldName} must be at most {max}",
    cannotBeEmpty: "{fieldName} cannot be empty",
    mustBeTrueOrFalse: "Value must be true or false",
    // Mode Toggle (Proxy/Paid)
    connectionMode: "Connection Mode",
    proxyMode: "Proxy Mode",
    paidMode: "Paid Mode",
    usingLocalProxy: "Using local proxy server (localhost:{port})",
    usingOfficialApi: "Using official Anthropic API (requires subscription)",
    paidModeTitle: "Claude CLI is using the official Anthropic API",
    paidModeDesc: "All proxy configuration has been removed. Claude CLI uses your Anthropic subscription directly.",
    paidModeHint: "Switch to Proxy mode to configure model routing and presets.",
    modeToggleFailed: "Failed to switch mode",
};
