import Cookie from "js-cookie";

export function isEmail(input: string): boolean {
  const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
  return emailRegex.test(input);
}

export function NumberFormat(number: number): string {
  return Intl.NumberFormat("fa-IR").format(number);
}

export const getToken = () => {
  return Cookie.get(import.meta.env.VITE_TOKEN_NAME);
};

export const getRefreshToken = () => {
  return Cookie.get(import.meta.env.VITE_REFRESH_TOKEN_NAME);
};

const isProduction = import.meta.env.MODE === "production";
const domain = isProduction ? ".danakcorp.com" : undefined;

export const setToken = async (token: string) => {
  Cookie.set(import.meta.env.VITE_TOKEN_NAME, token, { domain });
};

export const setRefreshToken = async (refreshToken: string) => {
  Cookie.set(import.meta.env.VITE_REFRESH_TOKEN_NAME, refreshToken, {
    domain,
  });
};

export const removeToken = async () => {
  Cookie.remove(import.meta.env.VITE_TOKEN_NAME, { domain, path: "/" });
};

export const removeRefreshToken = async () => {
  Cookie.remove(import.meta.env.VITE_REFRESH_TOKEN_NAME, { domain, path: "/" });
};

export const timeAgo = (date: string | Date): string => {
  const now = new Date();
  const past = new Date(date);
  const diff = Math.floor((now.getTime() - past.getTime()) / 1000); // اختلاف بر حسب ثانیه

  const units = [
    { name: "سال", value: 60 * 60 * 24 * 365 },
    { name: "ماه", value: 60 * 60 * 24 * 30 },
    { name: "روز", value: 60 * 60 * 24 },
    { name: "ساعت", value: 60 * 60 },
    { name: "دقیقه", value: 60 },
    { name: "ثانیه", value: 1 },
  ];

  for (const unit of units) {
    const amount = Math.floor(diff / unit.value);
    if (amount >= 1) return `${amount} ${unit.name} پیش`;
  }

  return "همین الان";
};

export const convertToGB = (bytes: number): string => {
  const GB = bytes / (1024 * 1024 * 1024);
  return GB.toFixed(2);
};

export const getRedirectUrl = () => {
  const urlParams = new URLSearchParams(window.location.search);
  return urlParams.get("redirect");
};

export const formatDate = (dateString: string) => {
  const date = new Date(dateString);
  return new Intl.DateTimeFormat("fa-IR", {
    year: "numeric",
    month: "2-digit",
    day: "2-digit",
    hour: "2-digit",
    minute: "2-digit",
  }).format(date);
};

export const detectTextDirection = (text: string): "ltr" | "rtl" => {
  // حذف تگ‌های HTML برای تحلیل فقط متن
  const plainText = text.replace(/<[^>]*>/g, " ").trim();

  // اگر متن خالی است، از RTL استفاده کن
  if (!plainText) return "rtl";

  // الگوی کاراکترهای انگلیسی و اعداد
  const englishPattern = /[a-zA-Z0-9\s.,!?;:'"()\-@#$%^&*+=<>{}[\]\\|`~_]/g;
  const englishMatches = plainText.match(englishPattern) || [];

  // الگوی کاراکترهای فارسی و عربی (برای آینده ممکن است نیاز باشد)
  // const persianArabicPattern = /[\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\uFB50-\uFDFF\uFE70-\uFEFF]/g;

  // محاسبه درصد کاراکترهای انگلیسی
  const totalChars = plainText.replace(/\s/g, "").length;
  const englishChars = englishMatches.join("").replace(/\s/g, "").length;
  const englishPercentage =
    totalChars > 0 ? (englishChars / totalChars) * 100 : 0;

  // اگر بیش از 70% متن انگلیسی است، LTR استفاده کن
  return englishPercentage > 70 ? "ltr" : "rtl";
};

export const sanitizeEmailHTML = (html: string): string => {
  try {
    // Remove style tags and their content
    let sanitized = html.replace(/<style[^>]*>[\s\S]*?<\/style>/gi, "");

    // Remove link tags (CSS files)
    sanitized = sanitized.replace(/<link[^>]*>/gi, "");

    // Remove script tags for security
    sanitized = sanitized.replace(/<script[^>]*>[\s\S]*?<\/script>/gi, "");

    // Remove potentially harmful attributes
    sanitized = sanitized.replace(/\s*on\w+\s*=\s*["'][^"']*["']/gi, "");

    // تشخیص جهت متن اصلی
    const detectedDirection = detectTextDirection(sanitized);

    // فقط font-family، font-size و font-weight رو از inline styles حذف کن
    // text-align و direction رو فقط اگر با جهت تشخیص داده شده مطابقت نداشته باشد حذف کن
    sanitized = sanitized.replace(
      /style\s*=\s*["']([^"']*?)["']/gi,
      (_, styles) => {
        let cleanedStyles = styles
          .replace(/font-family\s*:\s*[^;]*;?/gi, "")
          .replace(/font-size\s*:\s*[^;]*;?/gi, "")
          .replace(/font-weight\s*:\s*[^;]*;?/gi, "");

        // اگر جهت تشخیص داده شده LTR است، direction و text-align را حفظ کن
        if (detectedDirection === "ltr") {
          // direction و text-align را حفظ کن
        } else {
          // اگر RTL است، این استایل‌ها را حذف کن تا استایل سایت اعمال شود
          cleanedStyles = cleanedStyles
            .replace(/text-align\s*:\s*[^;]*;?/gi, "")
            .replace(/direction\s*:\s*[^;]*;?/gi, "");
        }

        cleanedStyles = cleanedStyles
          .replace(/;\s*;/g, ";") // حذف سمیکالن‌های اضافی
          .replace(/^\s*;\s*|\s*;\s*$/g, ""); // حذف سمیکالن‌های ابتدا و انتها

        return cleanedStyles ? `style="${cleanedStyles}"` : "";
      }
    );

    return sanitized;
  } catch (error) {
    console.error("خطا در پاک‌سازی HTML:", error);
    return "خطا در نمایش محتوای ایمیل";
  }
};

// Interface برای mailbox structure
interface MailboxItem {
  id: string;
  name: string;
  unseen: number;
  total: number;
}

// Utility function برای گرفتن mailbox id از localStorage
export const getMailboxId = (mailboxName: string): string | null => {
  try {
    const mailboxesStr = localStorage.getItem("mailboxes");
    if (!mailboxesStr) return null;

    const mailboxes: MailboxItem[] = JSON.parse(mailboxesStr);
    const mailbox = mailboxes.find(
      (mb: MailboxItem) => mb.name === mailboxName
    );

    return mailbox?.id || null;
  } catch (error) {
    console.error("Error getting mailbox id:", error);
    return null;
  }
};
