export interface ChatbotTranslations {
  // UI Labels
  chatbot: string;
  minimize: string;
  maximize: string;
  close: string;
  send: string;
  typing: string;
  placeholder: string;
  offline: string;
  connecting: string;
  connected: string;
  retry: string;

  // Welcome Messages
  welcomeTitle: string;
  welcomeMessage: string;

  // Suggested Questions
  suggestedQuestions: string;
  noSuggestedQuestions: string;

  // Error Messages
  errorGeneric: string;
  errorNetwork: string;
  errorTimeout: string;

  // Feedback
  helpful: string;
  notHelpful: string;
  feedbackThanks: string;

  // Status Messages
  messageDelivered: string;
  messageFailed: string;

  // Accessibility
  openChat: string;
  closeChat: string;
  sendMessage: string;
  messageFromUser: string;
  messageFromBot: string;
}

// Language definitions
export const translations: Record<string, ChatbotTranslations> = {
  ko: {
    chatbot: "챗봇",
    minimize: "최소화",
    maximize: "최대화",
    close: "닫기",
    send: "전송",
    typing: "입력 중...",
    placeholder: "메시지를 입력하세요...",
    offline: "오프라인",
    connecting: "연결 중...",
    connected: "연결됨",
    retry: "다시 시도",

    welcomeTitle: "안녕하세요! 👋",
    welcomeMessage:
      "궁금한 것이 있으시면 언제든지 물어보세요. 아래 추천 질문을 클릭하거나 직접 메시지를 입력해주세요.",

    suggestedQuestions: "추천 질문",
    noSuggestedQuestions: "현재 추천 질문이 없습니다.",

    errorGeneric: "오류가 발생했습니다. 다시 시도해주세요.",
    errorNetwork: "네트워크 연결을 확인해주세요.",
    errorTimeout: "요청 시간이 초과되었습니다.",

    helpful: "도움이 되었나요?",
    notHelpful: "도움이 안 되었나요?",
    feedbackThanks: "피드백 감사합니다!",

    messageDelivered: "메시지가 전송되었습니다",
    messageFailed: "메시지 전송에 실패했습니다",

    openChat: "채팅창 열기",
    closeChat: "채팅창 닫기",
    sendMessage: "메시지 보내기",
    messageFromUser: "사용자 메시지",
    messageFromBot: "봇 메시지",
  },

  en: {
    chatbot: "Chatbot",
    minimize: "Minimize",
    maximize: "Maximize",
    close: "Close",
    send: "Send",
    typing: "Typing...",
    placeholder: "Type your message...",
    offline: "Offline",
    connecting: "Connecting...",
    connected: "Connected",
    retry: "Retry",

    welcomeTitle: "Hello! 👋",
    welcomeMessage:
      "Feel free to ask me anything. You can click on the suggested questions below or type your own message.",

    suggestedQuestions: "Suggested Questions",
    noSuggestedQuestions: "No suggested questions available.",

    errorGeneric: "An error occurred. Please try again.",
    errorNetwork: "Please check your network connection.",
    errorTimeout: "Request timed out.",

    helpful: "Was this helpful?",
    notHelpful: "Not helpful?",
    feedbackThanks: "Thank you for your feedback!",

    messageDelivered: "Message delivered",
    messageFailed: "Message failed to send",

    openChat: "Open chat",
    closeChat: "Close chat",
    sendMessage: "Send message",
    messageFromUser: "User message",
    messageFromBot: "Bot message",
  },

  ja: {
    chatbot: "チャットボット",
    minimize: "最小化",
    maximize: "最大化",
    close: "閉じる",
    send: "送信",
    typing: "入力中...",
    placeholder: "メッセージを入力してください...",
    offline: "オフライン",
    connecting: "接続中...",
    connected: "接続済み",
    retry: "再試行",

    welcomeTitle: "こんにちは！ 👋",
    welcomeMessage:
      "何でもお気軽にお聞きください。下の推奨質問をクリックするか、直接メッセージを入力してください。",

    suggestedQuestions: "推奨質問",
    noSuggestedQuestions: "推奨質問はありません。",

    errorGeneric: "エラーが発生しました。もう一度お試しください。",
    errorNetwork: "ネットワーク接続をご確認ください。",
    errorTimeout: "リクエストがタイムアウトしました。",

    helpful: "お役に立ちましたか？",
    notHelpful: "お役に立ちませんでしたか？",
    feedbackThanks: "フィードバックありがとうございます！",

    messageDelivered: "メッセージが送信されました",
    messageFailed: "メッセージの送信に失敗しました",

    openChat: "チャットを開く",
    closeChat: "チャットを閉じる",
    sendMessage: "メッセージを送信",
    messageFromUser: "ユーザーメッセージ",
    messageFromBot: "ボットメッセージ",
  },

  ar: {
    chatbot: "الدردشة الآلية",
    minimize: "تصغير",
    maximize: "تكبير",
    close: "إغلاق",
    send: "إرسال",
    typing: "جاري الكتابة...",
    placeholder: "اكتب رسالتك...",
    offline: "غير متصل",
    connecting: "جاري الاتصال...",
    connected: "متصل",
    retry: "إعادة المحاولة",

    welcomeTitle: "مرحباً! 👋",
    welcomeMessage:
      "لا تتردد في سؤالي أي شيء. يمكنك النقر على الأسئلة المقترحة أدناه أو كتابة رسالتك الخاصة.",

    suggestedQuestions: "أسئلة مقترحة",
    noSuggestedQuestions: "لا توجد أسئلة مقترحة متاحة.",

    errorGeneric: "حدث خطأ. يرجى المحاولة مرة أخرى.",
    errorNetwork: "يرجى التحقق من اتصال الشبكة.",
    errorTimeout: "انتهت مهلة الطلب.",

    helpful: "هل كان هذا مفيداً؟",
    notHelpful: "غير مفيد؟",
    feedbackThanks: "شكراً لك على ملاحظاتك!",

    messageDelivered: "تم تسليم الرسالة",
    messageFailed: "فشل في إرسال الرسالة",

    openChat: "فتح الدردشة",
    closeChat: "إغلاق الدردشة",
    sendMessage: "إرسال رسالة",
    messageFromUser: "رسالة المستخدم",
    messageFromBot: "رسالة البوت",
  },
};

// Language metadata
export interface LanguageInfo {
  code: string;
  name: string;
  nativeName: string;
  direction: "ltr" | "rtl";
  flag: string;
}

export const languages: Record<string, LanguageInfo> = {
  ko: {
    code: "ko",
    name: "Korean",
    nativeName: "한국어",
    direction: "ltr",
    flag: "🇰🇷",
  },
  en: {
    code: "en",
    name: "English",
    nativeName: "English",
    direction: "ltr",
    flag: "🇺🇸",
  },
  ja: {
    code: "ja",
    name: "Japanese",
    nativeName: "日本語",
    direction: "ltr",
    flag: "🇯🇵",
  },
  ar: {
    code: "ar",
    name: "Arabic",
    nativeName: "العربية",
    direction: "rtl",
    flag: "🇸🇦",
  },
};

export type SupportedLanguage = keyof typeof translations;

// Default language
export const DEFAULT_LANGUAGE: SupportedLanguage = "en";

// Browser language detection
export function detectBrowserLanguage(): SupportedLanguage {
  if (typeof window === "undefined") return DEFAULT_LANGUAGE;

  const browserLang = navigator.language.slice(0, 2) as SupportedLanguage;
  return Object.keys(translations).includes(browserLang)
    ? browserLang
    : DEFAULT_LANGUAGE;
}

// Translation helper function
export function t(
  key: keyof ChatbotTranslations,
  lang: SupportedLanguage
): string {
  return (
    translations[lang]?.[key] || translations[DEFAULT_LANGUAGE][key] || key
  );
}

// RTL languages check
export function isRTL(language: SupportedLanguage): boolean {
  return languages[language]?.direction === "rtl";
}

// Text length adjustment for different languages
export function adjustTextLength(
  text: string,
  language: SupportedLanguage
): {
  isTruncated: boolean;
  displayText: string;
  maxLength: number;
} {
  // Different languages have different character densities
  const languageMultipliers: Record<SupportedLanguage, number> = {
    ko: 0.8, // Korean characters are typically wider
    en: 1.0, // English baseline
    ja: 0.7, // Japanese characters can be very wide
    ar: 1.2, // Arabic can be more compact
  };

  const baseMaxLength = 50;
  const multiplier = languageMultipliers[language] || 1.0;
  const adjustedMaxLength = Math.floor(baseMaxLength * multiplier);

  if (text.length <= adjustedMaxLength) {
    return {
      isTruncated: false,
      displayText: text,
      maxLength: adjustedMaxLength,
    };
  }

  return {
    isTruncated: true,
    displayText: text.slice(0, adjustedMaxLength - 3) + "...",
    maxLength: adjustedMaxLength,
  };
}
