// Englisches Dictionary - erfuellt denselben Dictionary-Vertrag wie de.ts.
import type { Dictionary } from './de';

export const en: Dictionary = {
  common: {
    back: 'Back',
    next: 'Next',
    close: 'Close',
    namePlaceholderOptional: 'Your name (optional)',
    joiningButton: 'Joining...',
    joinButton: 'Join',
    errorJoinDefault: 'Failed to join.',
    errorSessionNotFound: 'Table not found, maybe you mistyped the code?',
  },
  home: {
    introSubtitle: 'Swipe your way to a shared restaurant. No account needed, under a minute.',
    startSessionButton: 'Start a table',
    joinSessionButton: 'Join a table',
    stepAriaLabel: (current, total) => `Step ${current} of ${total}`,
    step1Title: "What's your name?",
    step1Subtitle: 'Optional — helps others in the group.',
    namePlaceholder: 'Your name',
    step2TitleWithName: (name) => `Alright ${name}, which city?`,
    step2TitleNoName: 'Alright, which city?',
    step2Subtitle: 'Location and search radius for your group.',
    cityPlaceholder: 'City, country or zip code',
    radiusLabel: 'Radius',
    step3Title: 'What are you in the mood for?',
    step3Subtitle: 'Pick a cuisine, spin the wheel, or leave it open.',
    cuisineLabel: 'Cuisine (optional)',
    diceButton: 'Spin',
    excludeFastFoodLabel: 'Chains & fast food',
    excludeFastFoodExcluded: 'Excluded',
    excludeFastFoodAllowed: 'Allowed',
    creatingButton: 'Creating table...',
    createButton: 'Create table',
    errorCreateDefault: 'Error creating table',
    joinTitle: 'Join a table',
    joinSubtitle: 'Enter the code from your host.',
    codePlaceholder: 'Table code, e.g. AB12CD',
    pageTitle: 'Home',
    joinInlineCloseAriaLabel: 'Close',
    joinInlineSubmitAriaLabel: 'Join',
    joinInlineBackAriaLabel: 'Back to code',
    howItWorksButton: 'How it works',
    resumeButton: 'Continue swiping',
  },
  session: {
    joinTitle: (code) => `Join table ${code}`,
    loadingRestaurants: 'Loading restaurants...',
    headerTitle: (code) => `Table ${code}`,
    infoAriaLabel: 'Table info',
    infoTitle: 'Show filters & participants',
    inviteButton: 'Invite',
    leaveSessionButton: 'Leave table',
    noRestaurantsFound: "No restaurants found. Check the table's location/radius.",
    stackEmptyPrompt: "Stack empty — what's next?",
    loadMoreButton: 'Show more cards',
    loadingMoreButton: 'Loading more cards...',
    jokerButton: 'Draw the Fate Joker',
    jokerLoadingButton: 'Drawing...',
    jokerOnlyCreatorHint: 'Only the group host can draw the joker.',
    jokerAlreadyDrawnHint: 'The Fate Joker has already decided.',
    toastJoined: (name) => `${name} joined`,
    toastLeft: (name) => `${name} left`,
    defaultParticipantName: 'Someone',
    shareTitle: 'Yumder table',
    shareText: (code) => `Join my Yumder table: ${code}`,
    linkCopied: (url) => `Link copied: ${url}`,
    confirmLeaveSession: 'Really leave this table? Your previous swipes stay saved, but you no longer count towards new matches.',
    errorRemovedFromSession: 'You were removed from this table.',
    errorVetoLimit: 'Veto not possible (limit reached?).',
    errorUndoFailed: 'Failed to undo.',
    errorJokerFailed: 'Could not draw the joker.',
    confirmKick: 'Really remove this person from the table?',
    errorKickFailed: 'Failed to remove.',
    errorLeaveFailed: 'Failed to leave.',
    eitherJokerLabel: 'Either: Joker',
    jokerLabel: 'Joker',
    orLabel: 'or',
    requestMoreCardsButton: 'Request more cards',
    requestingMoreCardsButton: 'Loading more cards...',
    tapJokerHint: 'Tap the card to reveal the joker',
    waitingForOracle: (name) => `${name} is consulting the oracle…`,
    jokerWaitForOthers: (names) => `Not everyone is done yet: ${names.join(', ')}`,
    newTableButton: 'Start a new table',
    pageTitle: 'Swipe',
  },
  swipeCard: {
    symbolBadge: 'Stock photo',
    sponsoredBadge: 'Ad',
    noMoreRestaurants: 'No more restaurants in the stack.',
    noVetosLeft: 'No vetoes left.',
    undoAriaLabel: 'Undo',
    undoTitle: 'Undo last swipe',
    noAriaLabel: 'Nope',
    vetoAriaLabel: 'Veto',
    yesAriaLabel: 'Yummie',
    detailsAriaLabel: 'Show details',
    detailsTitle: 'More info about this restaurant',
    noImageAvailable: 'No image available',
    closeAriaLabel: 'Close',
    websiteBadge: 'Website',
    orderButton: 'Order now',
    callButton: 'Call',
    websiteButton: 'Website',
    reservationButton: 'Reserve a table',
    legalDisclaimerAriaLabel: 'Legal notice',
  },
  filters: {
    cuisineSearchPlaceholder: 'Search cuisine...',
    noResults: 'No results.',
  },
  sessionInfo: {
    title: (code) => `Table ${code}`,
    closeAriaLabel: 'Close',
    participantsHeading: (count) => `Participants (${count})`,
    youSuffix: '(You)',
    guestFallbackName: 'Guest',
    vetosUsedOf3: (used) => `${used}/3 vetoes`,
    removeButton: 'Remove',
    activeFiltersTitle: 'Active filters for this table',
    noFiltersActive: 'No additional filters active.',
    copyCodeAriaLabel: 'Copy code',
    codeCopiedToast: 'Code copied',
    hostBadgeLabel: 'Group leader',
  },
  match: {
    matchLabel: 'MATCH!',
    jokerLabel: 'JOKER!',
    votesResult: (yes, total) => `${yes} out of ${total} votes`,
    forcedChoiceQuotes: [
      "You couldn't even agree while swiping. Lucky I'm here: this is where you're going.",
      "No match, no yes, no love. Good thing you have me. This is the place.",
      "You couldn't agree on a single restaurant. Classic group-decision behavior. I'll decide.",
      "0% approval, 100% joker power. It's happening, no arguing.",
    ],
    buildPartialQuotes: (pct) => [
      `Only ${pct}% wanted this — but the joker doesn't care about majorities!`,
      `${pct}% approval was plenty for the joker. Chance beats democracy.`,
      `Majority? Irrelevant. ${pct}% was enough for fate.`,
      `The joker has spoken: ${pct}% approval, the rest is destiny.`,
    ],
    callOrReserveButton: 'Call / Reserve',
    mapsButton: 'Show route',
    shareResultButton: 'Share result',
    shareResultText: (name) => `We're going to ${name}!`,
    dataDisclaimer: 'Opening hours & contact details may be outdated. Please double-check on Google/Apple Maps before heading out.',
    jokerRevealHeading: 'The Fate Joker is deciding...',
    jokerCardSubtitle: 'Joker',
    runnerUpsTitle: 'Close runners-up',
    votesCount: (n) => (n === 1 ? `${n} vote` : `${n} votes`),
    runnerUpRouteAriaLabel: (name) => `Show route to ${name}`,
    runnerUpOrderAriaLabel: (name) => `Order ${name} on Lieferando`,
    chosenByJoker: 'Chosen by the joker',
    selectedFromUndecided: (n) => `Selected from ${n} undecided restaurants`,
  },
  tutorial: {
    welcomeTitle: 'Welcome to Yumder!',
    startButton: "Let's go!",
    rulesHeading: 'How it works',
    undoDescription: 'Undo your last swipe if you tapped the wrong way.',
    noDescription: "Swipe left or tap: this restaurant isn't for you.",
    vetoDescriptionPart1: 'Swipe down or tap: instantly removes the restaurant for the whole group.',
    vetoDescriptionPart2: 'The number on the icon shows how many vetoes you have left.',
    yesDescription: "Swipe right or tap: you'd like to eat here.",
    detailsTitle: 'Details',
    detailsDescription: 'Shows address, opening hours, map and contact options for the restaurant.',
    matchTitle: 'Match',
    matchDescription: 'If enough people say "yes" to the same restaurant, everyone gets a live match: with 2 people both must agree, with 3+ people a ⅔ majority is enough.',
    jokerTitle: 'Fate Joker',
    jokerDescription: "If the stack is empty and there's still no match, the group host can draw the Fate Joker once. It decides weighted by \"yes\" votes — the more approval a restaurant already has, the more likely it gets picked.",
  },
  openingHours: {
    unknown: 'Opening hours unknown',
    currentlyClosed: 'Currently closed',
    open247: 'Open 24/7',
    unclear: 'Opening hours unclear',
    openNow: 'Open now',
  },
  matchHistory: {
    matchBadge: 'Match',
    jokerBadge: 'Joker',
    justNow: 'Just now',
    minutesAgo: (n) => `${n} minute${n === 1 ? '' : 's'} ago`,
    hoursAgo: (n) => `${n} hour${n === 1 ? '' : 's'} ago`,
    yesterday: 'Yesterday',
    daysAgo: (n) => `${n} day${n === 1 ? '' : 's'} ago`,
    deleteEntryAriaLabel: 'Remove from history',
    clearAllLabel: 'Clear all',
    emptyTitle: 'No matches yet',
    emptySubtitle: 'Your shared restaurant picks will show up here.',
    emptyCta: 'Start your first table',
    shareAriaLabel: 'Share restaurant',
    openMapsAriaLabel: 'Open address in Maps',
    copiedLabel: 'Copied',
    participantsLabel: (names) => {
      if (names.length === 0) return '';
      if (names.length === 1) return `${names[0]} joined`;
      const joined = names.slice(0, -1).join(', ') + ' and ' + names[names.length - 1];
      return `${joined} joined`;
    },
    sessionLabel: 'Table',
    copySessionAriaLabel: 'Copy table code',
  },
  nav: {
    home: 'Home',
    matches: 'Matches',
    settings: 'Settings',
  },
  matches: {
    pageTitle: 'Matches',
    title: 'Your matches',
    subtitle: 'Restaurants you decided on together.',
  },
  settings: {
    pageTitle: 'Settings',
    title: 'Settings',
    nameLabel: 'Your name',
    nameHint: 'Suggested for new tables.',
    languageLabel: 'Language',
    dataSectionTitle: 'Data',
    dataSectionDescription: 'Reset all locally stored data (table code, history, language).',
    dataResetButton: 'Reset data',
    feedbackTitle: 'Feedback',
    feedbackDescription: 'Ideas, wishes or a bug? Get in touch.',
    feedbackButton: 'Write an email',
    feedbackSubject: 'Yumder feedback',
    feedbackBody: '',
    experienceSectionTitle: 'Experience',
    hapticsTitle: 'Haptics',
    hapticsDescription: 'Vibrate on a match',
    soundTitle: 'Sounds',
    soundDescription: 'Sound on a match',
  },
  pwaBanner: {
    title: 'Install as app',
    subtitle: 'Faster start. No login.',
    installButton: 'Install',
    dismissAriaLabel: 'Dismiss',
  },
  dataPrivacy: {
    resetDataButton: 'Reset data',
    resetDataTitle: 'Delete all local data?',
    resetDataMessage: 'This removes all information stored on this device (table code, anonymous ID, history, language). No personal data is stored on the server.',
    resetDataConfirm: 'Delete',
    resetDataCancel: 'Cancel',
    resetDataSuccess: 'Local data has been deleted. The page will reload.',
  },
  deleteDataPage: {
    pageTitle: 'Delete data',
    metaDescription: 'How to delete your local and server-side data from Yumder.',
    heading: 'Delete your data',
    intro: 'Yumder stores only a small amount of data and does not use accounts. You can remove your local app data at any time, or ask us to delete server-side data.',
    localDataTitle: 'Local app data',
    localDataDescription: 'Only the following information is cached on your device:',
    localDataBulletCode: 'Your current table code',
    localDataBulletAnonymousId: 'Your anonymous participant ID',
    localDataBulletHistory: 'Your recent matches (history)',
    localDataBulletLanguage: 'Your language preference',
    resetButton: 'Delete all local data now',
    resetSuccess: 'Local data has been deleted. The page is reloading.',
    serverDataTitle: 'Server-side data',
    serverDataDescription: 'To run swipe tables, the following pseudonymous data is temporarily stored on our server:',
    serverDataBulletSwipes: 'Your yes/no/veto decisions within a table',
    serverDataBulletMatches: 'Matches achieved within a table',
    serverDataBulletSessions: 'Your participation in a table (anonymous ID)',
    serverDataContact: 'Because we do not store email addresses or accounts, we need your table code or anonymous ID to delete server-side data. Send us a short request:',
    contactEmailSubject: 'Request to delete my Yumder data',
    contactEmailBody: 'Hello Yumder team,%0D%0A%0D%0Aplease delete my server-side data. My table code or anonymous ID is:%0D%0A%0D%0A(Don\'t forget to enter the value here)%0D%0A%0D%0ABest regards',
    backToHome: 'Back to home',
  },
} satisfies Dictionary;
