import type { ComponentType } from "react";

export type IconComponent = ComponentType<{
  color?: string;
  size?: number;
  strokeWidth?: number;
}>;

export type UserTier = "visitor" | "registered" | "premium";

export type CategoryId =
  | "commerces"
  | "restaurants"
  | "artisans"
  | "services"
  | "evenements"
  | "bonsPlans";

export type ScreenId =
  | "home"
  | "explore"
  | "business"
  | "events"
  | "deals"
  | "pass"
  | "loyalty"
  | "giftCards"
  | "news"
  | "favorites"
  | "profile";

export type OfferAudience = "free" | "premium";

export interface Category {
  id: CategoryId;
  label: string;
  subtitle: string;
  icon: IconComponent;
}

export interface Business {
  id: string;
  name: string;
  category: CategoryId;
  categoryLabel: string;
  shortDescription: string;
  description: string;
  address: string;
  hours: string;
  phone: string;
  website: string;
  socials: {
    instagram?: string;
    facebook?: string;
  };
  coverColor: string;
  photos: string[];
  tags: string[];
  acceptsGiftCards: boolean;
  passBenefits: string[];
  offers: string[];
  coordinates: {
    latitude: number;
    longitude: number;
  };
  rating: number;
  distance: string;
}

export interface LocalEvent {
  id: string;
  title: string;
  date: string;
  time: string;
  place: string;
  description: string;
  highlight?: boolean;
  coverColor: string;
}

export interface Deal {
  id: string;
  title: string;
  businessId: string;
  audience: OfferAudience;
  validUntil: string;
  conditions: string;
  coverColor: string;
}

export interface NewsItem {
  id: string;
  title: string;
  category: string;
  date: string;
  excerpt: string;
}

export interface LoyaltyPassage {
  id: string;
  businessName: string;
  date: string;
  points: number;
}

export interface Reward {
  id: string;
  title: string;
  pointsRequired: number;
  businessName: string;
}

export interface GiftCard {
  id: string;
  amount: number;
  recipient: string;
  status: "active" | "used";
  purchasedAt: string;
}
