// Authentication utilities
import { API_BASE_URL } from "../config/api";

export interface UserInfo {
  ID: number;
  Name: string;
  Family: string;
  Email: string;
  Mobile: string;
  Username: string;
  BirthDate: string;
  NationalCode: string;
  Status: boolean;
  CustomeTheme: string;
  FatherName: string;
}

export interface TokenInfo {
  ID: number;
  AccessToken: string;
  RefreshToken: string;
  ExpAccessToken: string;
  ExpRefreshToken: string;
  ExpAccessTokenStamp: string;
  ExpRefreshTokenStamp: string;
}

// بررسی معتبر بودن توکن
export const isTokenValid = (): boolean => {
  const accessToken = localStorage.getItem("accessToken");
  
  if (!accessToken) {
    return false;
  }

  // اگر نیاز به بررسی تاریخ انقضا هست:
  // const expDate = localStorage.getItem("expAccessToken");
  // if (expDate && new Date(expDate) < new Date()) {
  //   return false;
  // }

  return true;
};

// دریافت اطلاعات کاربر
export const getUserInfo = (): UserInfo | null => {
  const userInfoStr = localStorage.getItem("userInfo");
  if (!userInfoStr) {
    return null;
  }
  
  try {
    return JSON.parse(userInfoStr);
  } catch {
    return null;
  }
};

// دریافت توکن دسترسی
export const getAccessToken = (): string | null => {
  return localStorage.getItem("accessToken");
};

// دریافت یوزرنیم (همان ID)
export const getUsername = (): string | null => {
  return localStorage.getItem("username");
};

// خروج از سیستم (با ارسال درخواست به سرور)
export const logout = async (): Promise<void> => {
  const accessToken = getAccessToken();
  
  if (accessToken) {
    try {
      // ارسال درخواست logout به سرور
      await fetch(`${API_BASE_URL}/api/logout`, {
        method: "POST",
        headers: {
          "Content-Type": "application/json;charset=UTF-8",
          "Authorization": `Bearer ${accessToken}`,
        },
        body: "",
      });
    } catch (error) {
      console.error("خطا در logout از سرور:", error);
      // حتی در صورت خطا، localStorage را پاک می‌کنیم
    }
  }
  
  // پاک کردن تمام اطلاعات از localStorage
  localStorage.removeItem("accessToken");
  localStorage.removeItem("refreshToken");
  localStorage.removeItem("userId");
  localStorage.removeItem("username");
  localStorage.removeItem("userInfo");
  localStorage.removeItem("userProfile"); // پاک کردن cache پروفایل
};

// بررسی احراز هویت و هدایت به لاگین در صورت نیاز
export const requireAuth = (): boolean => {
  if (!isTokenValid()) {
    // فقط پاک کردن داده‌های قدیمی بدون ارسال درخواست به سرور
    localStorage.removeItem("accessToken");
    localStorage.removeItem("refreshToken");
    localStorage.removeItem("userId");
    localStorage.removeItem("username");
    localStorage.removeItem("userInfo");
    localStorage.removeItem("userProfile"); // پاک کردن cache پروفایل
    return false;
  }
  return true;
};