export type UiLanguage = 'PL' | 'EN' | 'UK' | 'DE';

const en: Record<string, string> = {
  'Kupuję': 'Buy',
  'Wynajmuję': 'Rent',
  'Jak sprzedawać': 'How to sell',
  'Wycena mieszkania': 'Property valuation',
  'Firmy i usługi': 'Companies and services',
  'Poradniki': 'Guides',
  'Dane i ustawienia': 'Data and settings',
  'Edytuj profil': 'Edit profile',
  'Dodatkowe informacje': 'Additional information',
  'Adres zamieszkania': 'Residential address',
  'Preferencje kontaktu': 'Contact preferences',
  'Język komunikacji': 'Communication language',
  'Nie podano': 'Not provided',
  'Polski': 'Polish',
  'Zapisz zmiany': 'Save changes',
  'Dodaj zdjęcie': 'Add photo',
  'Zmień zdjęcie': 'Change photo',
  'Usuń zdjęcie': 'Remove photo',
  'Personalizacja profilu': 'Profile personalization',
  'Widoczność profilu': 'Profile visibility',
  'Publiczna': 'Public',
  'Prywatna': 'Private',
  'Tylko kontakty': 'Contacts only',
  'Profil publiczny': 'Public profile',
  'Zobacz profil': 'View profile',
  'Usunięcie konta': 'Account deletion',
  'Usuń konto': 'Delete account',
  'Porównanie mieszkań': 'Apartment comparison',
  'Porównaj do 4 mieszkań i wybierz najlepszą ofertę dla siebie.': 'Compare up to 4 apartments and choose the best option for you.',
  'Dodaj mieszkania do porównania': 'Add apartments to compare',
  'Możesz porównać do 4 ofert jednocześnie.': 'You can compare up to 4 listings at once.',
  'Szukaj mieszkań': 'Search apartments',
  'Wszystkie typy': 'All types',
  'Mieszkanie': 'Apartment',
  'Dom': 'House',
  'Działka': 'Plot',
  'Lokal użytkowy': 'Commercial unit',
  'Pokój': 'Room',
  'Dodaj': 'Add',
  'Podsumowanie porównania': 'Comparison summary',
  'Cena': 'Price',
  'Cena całkowita': 'Total price',
  'Cena za m²': 'Price per m²',
  'Przelicznik ceny do metrażu': 'Price-to-area ratio',
  'Lokalizacja': 'Location',
  'Lokalizacja ogłoszenia': 'Listing location',
  'Metraż': 'Area',
  'Powierzchnia użytkowa': 'Usable area',
  'Liczba pokoi': 'Number of rooms',
  'Ilość pomieszczeń': 'Number of spaces',
  'Piętro': 'Floor',
  'Poziom mieszkania': 'Apartment floor',
  'Stan': 'Condition',
  'Stan techniczny': 'Technical condition',
  'Rok budowy': 'Year built',
  'Rok oddania do użytku': 'Year commissioned',
  'Czynsz': 'Rent',
  'Miesięczny czynsz': 'Monthly rent',
  'Parking': 'Parking',
  'Miejsce parkingowe': 'Parking space',
  'Balkon / Taras': 'Balcony / Terrace',
  'Dodatkowa przestrzeń': 'Additional space',
  'Dostępność': 'Availability',
  'Termin dostępności': 'Availability date',
  'Ocena ogólna': 'Overall score',
  'Na podstawie kluczowych czynników': 'Based on key factors',
  'Brak wybranych ogłoszeń': 'No selected listings',
  'Dodaj pierwsze mieszkanie, aby rozpocząć porównanie.': 'Add your first apartment to start comparison.',
  'Zobacz ogłoszenie': 'View listing',
  'Wczytuję ogłoszenia...': 'Loading listings...',
  'Udostępnij porównanie': 'Share comparison',
  'Wyczyść wszystko': 'Clear all',
  'Strona główna': 'Home page',
  'Porównywarka mieszkań': 'Apartment comparison tool',
  'Sprzedaż': 'Sale',
  'Wynajem': 'Rent',
  'Dodaj min. 2 oferty do porównania': 'Add at least 2 listings to compare',
  'Świetna': 'Excellent',
  'Bardzo dobra': 'Very good',
  'Dobra': 'Good',
  'Do poprawy': 'Needs improvement',
  'Od zaraz': 'Immediately',
  'Do uzgodnienia': 'To be agreed',
  'Brak': 'None',
};

const uk: Record<string, string> = {
  'Kupuję': 'Купую',
  'Wynajmuję': 'Орендую',
  'Jak sprzedawać': 'Як продавати',
  'Wycena mieszkania': 'Оцінка нерухомості',
  'Firmy i usługi': 'Компанії та послуги',
  'Poradniki': 'Порадники',
  'Dane i ustawienia': 'Дані та налаштування',
  'Edytuj profil': 'Редагувати профіль',
  'Dodatkowe informacje': 'Додаткова інформація',
  'Adres zamieszkania': 'Адреса проживання',
  'Preferencje kontaktu': 'Параметри контакту',
  'Język komunikacji': 'Мова спілкування',
  'Nie podano': 'Не вказано',
  'Polski': 'Польська',
  'Zapisz zmiany': 'Зберегти зміни',
  'Dodaj zdjęcie': 'Додати фото',
  'Zmień zdjęcie': 'Змінити фото',
  'Usuń zdjęcie': 'Видалити фото',
  'Personalizacja profilu': 'Персоналізація профілю',
  'Widoczność profilu': 'Видимість профілю',
  'Publiczna': 'Публічний',
  'Prywatna': 'Приватний',
  'Tylko kontakty': 'Лише контакти',
  'Profil publiczny': 'Публічний профіль',
  'Zobacz profil': 'Переглянути профіль',
  'Usunięcie konta': 'Видалення облікового запису',
  'Usuń konto': 'Видалити обліковий запис',
  'Porównanie mieszkań': 'Порівняння квартир',
  'Porównaj do 4 mieszkań i wybierz najlepszą ofertę dla siebie.': 'Порівняйте до 4 квартир і оберіть найкращу пропозицію для себе.',
  'Dodaj mieszkania do porównania': 'Додайте квартири для порівняння',
  'Możesz porównać do 4 ofert jednocześnie.': 'Ви можете порівняти до 4 оголошень одночасно.',
  'Szukaj mieszkań': 'Пошук квартир',
  'Wszystkie typy': 'Усі типи',
  'Mieszkanie': 'Квартира',
  'Dom': 'Будинок',
  'Działka': 'Ділянка',
  'Lokal użytkowy': 'Комерційне приміщення',
  'Pokój': 'Кімната',
  'Dodaj': 'Додати',
  'Podsumowanie porównania': 'Підсумок порівняння',
  'Cena': 'Ціна',
  'Cena całkowita': 'Загальна ціна',
  'Cena za m²': 'Ціна за м²',
  'Lokalizacja': 'Локація',
  'Metraż': 'Площа',
  'Liczba pokoi': 'Кількість кімнат',
  'Piętro': 'Поверх',
  'Stan': 'Стан',
  'Rok budowy': 'Рік побудови',
  'Czynsz': 'Орендна плата',
  'Parking': 'Паркування',
  'Balkon / Taras': 'Балкон / Тераса',
  'Dostępność': 'Доступність',
  'Ocena ogólna': 'Загальна оцінка',
  'Brak wybranych ogłoszeń': 'Немає вибраних оголошень',
  'Zobacz ogłoszenie': 'Переглянути оголошення',
  'Udostępnij porównanie': 'Поділитися порівнянням',
  'Wyczyść wszystko': 'Очистити все',
  'Strona główna': 'Головна сторінка',
  'Porównywarka mieszkań': 'Порівняння квартир',
  'Sprzedaż': 'Продаж',
  'Wynajem': 'Оренда',
  'Brak': 'Немає',
};

const de: Record<string, string> = {
  'Kupuję': 'Ich kaufe',
  'Wynajmuję': 'Ich miete',
  'Jak sprzedawać': 'Wie verkauft man',
  'Wycena mieszkania': 'Immobilienbewertung',
  'Firmy i usługi': 'Firmen und Dienstleistungen',
  'Poradniki': 'Ratgeber',
  'Dane i ustawienia': 'Daten und Einstellungen',
  'Edytuj profil': 'Profil bearbeiten',
  'Dodatkowe informacje': 'Zusätzliche Informationen',
  'Adres zamieszkania': 'Wohnadresse',
  'Preferencje kontaktu': 'Kontaktpräferenzen',
  'Język komunikacji': 'Kommunikationssprache',
  'Nie podano': 'Nicht angegeben',
  'Polski': 'Polnisch',
  'Zapisz zmiany': 'Änderungen speichern',
  'Dodaj zdjęcie': 'Foto hinzufügen',
  'Zmień zdjęcie': 'Foto ändern',
  'Usuń zdjęcie': 'Foto entfernen',
  'Personalizacja profilu': 'Profilpersonalisierung',
  'Widoczność profilu': 'Profilsichtbarkeit',
  'Publiczna': 'Öffentlich',
  'Prywatna': 'Privat',
  'Tylko kontakty': 'Nur Kontakte',
  'Profil publiczny': 'Öffentliches Profil',
  'Zobacz profil': 'Profil ansehen',
  'Usunięcie konta': 'Konto löschen',
  'Usuń konto': 'Konto entfernen',
  'Porównanie mieszkań': 'Wohnungsvergleich',
  'Porównaj do 4 mieszkań i wybierz najlepszą ofertę dla siebie.': 'Vergleichen Sie bis zu 4 Wohnungen und wählen Sie das beste Angebot.',
  'Dodaj mieszkania do porównania': 'Wohnungen zum Vergleich hinzufügen',
  'Możesz porównać do 4 ofert jednocześnie.': 'Sie können bis zu 4 Angebote gleichzeitig vergleichen.',
  'Szukaj mieszkań': 'Wohnungen suchen',
  'Wszystkie typy': 'Alle Typen',
  'Mieszkanie': 'Wohnung',
  'Dom': 'Haus',
  'Działka': 'Grundstück',
  'Lokal użytkowy': 'Gewerbeobjekt',
  'Pokój': 'Zimmer',
  'Dodaj': 'Hinzufügen',
  'Podsumowanie porównania': 'Vergleichszusammenfassung',
  'Cena': 'Preis',
  'Cena całkowita': 'Gesamtpreis',
  'Cena za m²': 'Preis pro m²',
  'Lokalizacja': 'Standort',
  'Metraż': 'Fläche',
  'Liczba pokoi': 'Zimmeranzahl',
  'Piętro': 'Etage',
  'Stan': 'Zustand',
  'Rok budowy': 'Baujahr',
  'Czynsz': 'Miete',
  'Parking': 'Parken',
  'Balkon / Taras': 'Balkon / Terrasse',
  'Dostępność': 'Verfügbarkeit',
  'Ocena ogólna': 'Gesamtbewertung',
  'Brak wybranych ogłoszeń': 'Keine ausgewählten Anzeigen',
  'Zobacz ogłoszenie': 'Anzeige ansehen',
  'Udostępnij porównanie': 'Vergleich teilen',
  'Wyczyść wszystko': 'Alles löschen',
  'Strona główna': 'Startseite',
  'Porównywarka mieszkań': 'Wohnungsvergleich',
  'Sprzedaż': 'Verkauf',
  'Wynajem': 'Miete',
  'Brak': 'Keine',
};

const dictionaries: Record<Exclude<UiLanguage, 'PL'>, Record<string, string>> = {
  EN: en,
  UK: uk,
  DE: de,
};

function normalizeKey(value: string): string {
  return value.replace(/\s+/g, ' ').trim();
}

export function getManualTranslation(language: UiLanguage, source: string): string | null {
  if (language === 'PL') {
    return source;
  }
  const dictionary = dictionaries[language];
  if (!dictionary) {
    return null;
  }
  const exact = dictionary[source];
  if (exact) {
    return exact;
  }

  const normalizedSource = normalizeKey(source);
  if (!normalizedSource) {
    return null;
  }
  const normalizedHit = dictionary[normalizedSource];
  return normalizedHit ?? null;
}
