export const ROLES = ["member", "verified", "wholesale", "admin"] as const;
export type Role = (typeof ROLES)[number];

export const PROFILE_TYPES = [
  { value: "dealer", label: "Gem dealer" },
  { value: "cutter", label: "Gem cutter" },
  { value: "miner", label: "Miner / supplier" },
  { value: "collector", label: "Collector / buyer" },
  { value: "company", label: "Company / business" },
  { value: "lab", label: "Gem lab" },
  { value: "jeweler", label: "Jewelry maker" },
  { value: "wholesaler", label: "Wholesaler" },
  { value: "auction_house", label: "Auction house" },
  { value: "service", label: "Industry service" },
] as const;

export type ProfileType = (typeof PROFILE_TYPES)[number]["value"];

export const AUCTION_CATEGORIES = [
  { value: "premium", label: "Premium stones" },
  { value: "medium", label: "Medium grade" },
  { value: "collector", label: "Collector stones" },
  { value: "wholesale", label: "Wholesale lots" },
] as const;

export type SessionUser = {
  id: string;
  email: string;
  name: string;
  role: Role;
  verificationStatus: string;
  wholesaleStatus: string;
};

export function isRole(value: string): value is Role {
  return (ROLES as readonly string[]).includes(value);
}

export function hasCommunityAccess(user: SessionUser | null) {
  return Boolean(user);
}

export function isVerified(user: SessionUser | null) {
  return user?.role === "verified" || user?.role === "wholesale" || user?.role === "admin";
}

export function isMemberVerified(member: { role: string; verificationStatus: string }) {
  return (
    member.verificationStatus === "approved" ||
    member.role === "verified" ||
    member.role === "wholesale" ||
    member.role === "admin"
  );
}

export function isWholesale(user: SessionUser | null) {
  return (
    user?.wholesaleStatus === "approved" ||
    user?.role === "wholesale" ||
    user?.role === "admin"
  );
}

export function isAdmin(user: SessionUser | null) {
  return user?.role === "admin";
}

export function roleLabel(role: string) {
  switch (role) {
    case "admin":
      return "Network steward";
    case "wholesale":
      return "Wholesale member";
    case "verified":
      return "Verified professional";
    default:
      return "Registered member";
  }
}

export function profileTypeLabel(type: string) {
  return PROFILE_TYPES.find((item) => item.value === type)?.label ?? type;
}
