// Bilingual support
export interface LocalizedString {
  en: string;
  zh: string;
}

// Service
export interface Service {
  _id: string;
  title: LocalizedString;
  slug: string;
  shortDescription: LocalizedString;
  fullDescription: LocalizedString;
  icon?: string;
  featuredImage?: string;
  link?: string;
  features: LocalizedString[];
  order: number;
  status: 'active' | 'inactive';
  createdAt: string;
  updatedAt: string;
}

// Auth
export interface User {
  _id: string;
  id?: string;
  email: string;
  name: string;
  role: 'admin' | 'editor' | 'author';
  avatar?: string;
  isActive: boolean;
  lastLogin?: string;
  createdAt: string;
  updatedAt: string;
}

export interface AuthResponse {
  token: string;
  user: User;
}

// Site Settings
export interface SiteSettings {
  siteName: LocalizedString;
  siteDescription: LocalizedString;
  logo?: string;
  favicon?: string;
  contact: {
    email: string;
    phone?: string;
    whatsapp?: string;
    address?: LocalizedString;
    mapUrl?: string;
  };
  social: {
    facebook?: string;
    twitter?: string;
    linkedin?: string;
    instagram?: string;
    youtube?: string;
    xiaohongshu?: string;
  };
  seo: {
    defaultTitle?: string;
    defaultDescription?: string;
    defaultKeywords?: string[];
    ogImage?: string;
  };
  analytics?: {
    googleAnalyticsId?: string;
    googleTagManagerId?: string;
  };
  footer?: {
    copyrightText?: LocalizedString;
    showNewsletter?: boolean;
  };
  hero: {
    title: LocalizedString;
    subtitle: LocalizedString;
    backgroundImage?: string;
    ctaText?: LocalizedString;
    ctaLink?: string;
  };
  navigation?: {
    megaMenuPromos?: {
      services?: { image?: string; title?: LocalizedString; link?: string };
      about?: { image?: string; title?: LocalizedString; link?: string };
      golfId?: { image?: string; title?: LocalizedString; link?: string };
    };
    navLabels?: {
      home?: LocalizedString;
      about?: LocalizedString;
      services?: LocalizedString;
      eventGallery?: LocalizedString;
      golfId?: LocalizedString;
    };
  };
  stats: Array<{
    number: string;
    label: LocalizedString;
  }>;
}

// Golf Services Page
export interface GolfServicesPageData {
  heroTitle: LocalizedString;
  heroDescription: LocalizedString;
  serviceCards: Array<{
    image?: string;
    title: LocalizedString;
    description: LocalizedString;
    link: string;
  }>;
}

// Post
export interface Post {
  _id: string;
  title: LocalizedString;
  slug: string;
  content: LocalizedString;
  excerpt?: LocalizedString;
  featuredImage?: string;
  videoUrl?: string;
  videoThumbnail?: string;
  category: string;
  tags: string[];
  status: 'draft' | 'published' | 'archived';
  author: {
    _id: string;
    name: string;
    avatar?: string;
  };
  readTime?: number;
  views: number;
  publishedAt?: string;
  seo?: {
    title?: string;
    description?: string;
    keywords?: string[];
    ogImage?: string;
  };
  createdAt: string;
  updatedAt: string;
}

// Page
export interface ContentBlock {
  type: 'hero' | 'text' | 'image' | 'gallery' | 'video' | 'cta' | 'stats' | 'testimonials' | 'team' | 'services' | 'contact' | 'custom';
  order: number;
  data: Record<string, unknown>;
}

export interface Page {
  _id: string;
  title: LocalizedString;
  slug: string;
  content: ContentBlock[];
  excerpt?: LocalizedString;
  featuredImage?: string;
  template: 'default' | 'landing' | 'about' | 'services' | 'contact' | 'custom';
  status: 'draft' | 'published' | 'archived';
  author: {
    _id: string;
    name: string;
  };
  publishedAt?: string;
  seo?: {
    title?: string;
    description?: string;
    keywords?: string[];
    ogImage?: string;
  };
  createdAt: string;
  updatedAt: string;
}

// Media
export interface Media {
  _id: string;
  filename: string;
  originalName: string;
  mimetype: string;
  size: number;
  path: string;
  url: string;
  alt?: string;
  caption?: string;
  uploadedBy: {
    _id: string;
    name: string;
  };
  folder: string;
  dimensions?: {
    width: number;
    height: number;
  };
  createdAt: string;
  updatedAt: string;
}

// About Page
export interface AboutPageData {
  heroTitle: LocalizedString;
  heroSubtitle: LocalizedString;
  heroImage?: string;
  introTitle: LocalizedString;
  introContent: LocalizedString;
  introImage?: string;
  contentSections: Array<{
    label: LocalizedString;
    title: LocalizedString;
    content: LocalizedString;
    image?: string;
    imagePosition: string;
  }>;
  galleryImages: string[];
  ctaTitle: LocalizedString;
  ctaDescription: LocalizedString;
  ctaButtonText: LocalizedString;
  ctaButtonLink?: string;
}

// Golf Academy
export interface GolfAcademyData {
  heroTitle: LocalizedString;
  heroSubtitle: LocalizedString;
  heroImage?: string;
  introContent: LocalizedString;
  benefits: Array<{
    title: LocalizedString;
    description: LocalizedString;
  }>;
  ctaTitle: LocalizedString;
  ctaDescription: LocalizedString;
  ctaButtonText: LocalizedString;
  ctaButtonLink?: string;
  coaches: Array<{
    name: LocalizedString;
    title: LocalizedString;
    organization: LocalizedString;
    photo?: string;
    order: number;
  }>;
  joinTitle: LocalizedString;
  joinSubtitle: LocalizedString;
  joinBackgroundImage?: string;
}

export interface CoachInquiry {
  _id: string;
  firstName: string;
  lastName: string;
  email: string;
  message?: string;
  createdAt: string;
}

// Book Lesson
export interface BookLessonData {
  heroTitle: LocalizedString;
  heroSubtitle: LocalizedString;
  heroDescription: LocalizedString;
  heroImage?: string;
  heroCtaText: LocalizedString;
  heroCtaLink?: string;
  bookingTitle: LocalizedString;
  bookingSubtitle: LocalizedString;
  bookingDescription: LocalizedString;
  availableDays: number[];
  timeSlots: Array<{ startTime: string; endTime: string }>;
  maxCapacityPerSlot: number;
  termsAndConditions: LocalizedString[];
}

export interface LessonBooking {
  _id: string;
  date: string;
  timeSlot: string;
  firstName: string;
  lastName: string;
  email: string;
  phone: string;
  golfId?: string;
  status: 'pending' | 'confirmed' | 'cancelled';
  notes?: string;
  createdAt: string;
  updatedAt: string;
}

// Group Services
export interface GroupServicesData {
  heroTitle: LocalizedString;
  heroSubtitle: LocalizedString;
  heroImage?: string;
  advantagesTitle: LocalizedString;
  advantagesDescription: LocalizedString;
  advantages: Array<{
    image?: string;
    title: LocalizedString;
    description: LocalizedString;
  }>;
  servicesTitle: LocalizedString;
  serviceItems: Array<{
    title: LocalizedString;
    description: LocalizedString;
  }>;
  tournamentsTitle: LocalizedString;
  tournamentItems: Array<{
    title: LocalizedString;
    details: LocalizedString[];
  }>;
}

// Events Page
export interface EventsPageData {
  heroTitle: LocalizedString;
  heroSubtitle: LocalizedString;
  heroImage?: string;
  events: Array<{
    title: LocalizedString;
    description: LocalizedString;
    date: string;
    endDate?: string;
    venue: LocalizedString;
    location: LocalizedString;
    image?: string;
    isFeatured: boolean;
    links: Array<{
      label: LocalizedString;
      url: string;
    }>;
  }>;
}

// Golf Development Fund
export interface GolfDevelopmentFundData {
  heroTitle: LocalizedString;
  heroSubtitle: LocalizedString;
  heroImage?: string;
  operationTitle: LocalizedString;
  operationDescription: LocalizedString;
  operationSteps: Array<{
    title: LocalizedString;
    description: LocalizedString;
    image?: string;
  }>;
  ctaBanner: {
    title: LocalizedString;
    description: LocalizedString;
    buttonText: LocalizedString;
    buttonUrl: string;
  };
  investmentTitle: LocalizedString;
  investmentDescription: LocalizedString;
  investmentAreas: Array<{
    title: LocalizedString;
    description: LocalizedString;
    image?: string;
  }>;
}

// Event Gallery
export interface MediaItem {
  url: string;
  type: 'image' | 'video';
}

export interface EventGalleryItem {
  _id: string;
  title: LocalizedString;
  slug: string;
  description: LocalizedString;
  coverImage?: string;
  media: MediaItem[];
  photos?: string[];
  eventDate: string;
  status: 'draft' | 'published';
  cardSize?: 'small' | 'wide' | 'tall' | 'large';
  order: number;
  createdAt: string;
  updatedAt: string;
}

export interface EventGallerySettingsData {
  heroTitle: LocalizedString;
  heroSubtitle: LocalizedString;
  heroImage?: string;
}

// Golf ID
export interface GolfIdData {
  heroTitle: LocalizedString;
  heroSubtitle: LocalizedString;
  heroImage?: string;
  heroCtaText: LocalizedString;
  heroCtaLink?: string;
  benefits: Array<{
    title: LocalizedString;
    description: LocalizedString;
    highlight: LocalizedString;
  }>;
  sections: Array<{
    title: LocalizedString;
    description: LocalizedString;
    image?: string;
    ctaText: LocalizedString;
    ctaLink: string;
  }>;
  ctaTitle: LocalizedString;
  ctaHotline?: string;
  ctaButtonText: LocalizedString;
  ctaButtonLink?: string;
}

// Membership Offers
export interface MembershipOffersData {
  heroTitle: LocalizedString;
  heroSubtitle: LocalizedString;
  heroImage?: string;
  bannerImage?: string;
  termsAndConditions: LocalizedString;
  ctaTitle: LocalizedString;
  ctaHotline?: string;
  ctaButtonText: LocalizedString;
  ctaButtonLink?: string;
  offerCategories: Array<{
    title: LocalizedString;
    description: LocalizedString;
    bulletPoints: LocalizedString[];
    image?: string;
  }>;
}

// Upgrade Offers
export interface UpgradeOffersData {
  heroTitle: LocalizedString;
  heroSubtitle: LocalizedString;
  heroImage?: string;
  highlights: Array<{
    value: string;
    label: LocalizedString;
  }>;
  featureSections: Array<{
    title: LocalizedString;
    description: LocalizedString;
    bulletPoints: LocalizedString[];
    image?: string;
  }>;
  upgradeTiers: Array<{
    name: LocalizedString;
    subtitle: LocalizedString;
    features: LocalizedString[];
    highlighted?: boolean;
  }>;
  termsAndConditions: LocalizedString;
  ctaTitle: LocalizedString;
  ctaHotline?: string;
  ctaButtonText: LocalizedString;
  ctaButtonLink?: string;
}

// Member Rewards
export interface MemberRewardsData {
  heroTitle: LocalizedString;
  heroSubtitle: LocalizedString;
  heroImage?: string;
  highlights: Array<{
    value: string;
    label: LocalizedString;
  }>;
  featureSections: Array<{
    title: LocalizedString;
    description: LocalizedString;
    bulletPoints: LocalizedString[];
    image?: string;
  }>;
  ctaTitle: LocalizedString;
  ctaHotline?: string;
  ctaButtonText: LocalizedString;
  ctaButtonLink?: string;
}

// Bonus Points
export interface BonusPointsData {
  heroTitle: LocalizedString;
  heroSubtitle: LocalizedString;
  heroImage?: string;
  highlights: Array<{
    value: string;
    label: LocalizedString;
  }>;
  products: Array<{
    brand: LocalizedString;
    name: LocalizedString;
    image?: string;
    pointsRequired: string;
  }>;
  ctaTitle: LocalizedString;
  ctaHotline?: string;
  ctaButtonText: LocalizedString;
  ctaButtonLink?: string;
}

export interface HomePageData {
  newsSection: {
    title: LocalizedString;
    subtitle: LocalizedString;
  };
  servicesSection: {
    title: LocalizedString;
    subtitle: LocalizedString;
    cards: Array<{
      title: LocalizedString;
      description: LocalizedString;
      image?: string;
      link: string;
    }>;
  };
  eventGallerySection: {
    title: LocalizedString;
    subtitle: LocalizedString;
  };
  golfIdSection: {
    title: LocalizedString;
    description: LocalizedString;
    image?: string;
    ctaText: LocalizedString;
    ctaLink: string;
  };
  aboutSection: {
    title: LocalizedString;
    description: LocalizedString;
    ctaText: LocalizedString;
  };
}

// Partners
export interface PartnersData {
  heroTitle: LocalizedString;
  heroSubtitle: LocalizedString;
  heroImage?: string;
  partners: Array<{
    name: LocalizedString;
    logo?: string;
    description: LocalizedString;
    website?: string;
  }>;
}

// Contact Page
export interface ContactPageData {
  heroTitle: LocalizedString;
  heroSubtitle: LocalizedString;
  heroImage?: string;
  contactItems: Array<{
    label: LocalizedString;
    value: LocalizedString;
    href?: string;
  }>;
  formTitle: LocalizedString;
  formSubtitle: LocalizedString;
}

export interface ContactInquiryData {
  _id: string;
  name: string;
  phone: string;
  email: string;
  message: string;
  createdAt: string;
}

// Privacy Page
export interface PrivacyPageData {
  heroTitle: LocalizedString;
  heroSubtitle: LocalizedString;
  heroImage?: string;
  sections: Array<{
    title: LocalizedString;
    content: LocalizedString;
  }>;
}

export interface EshopProduct {
  name: LocalizedString;
  brand: string;
  image?: string;
  regularPrice: number;
  memberPrice: number;
  description?: LocalizedString;
  isActive: boolean;
}

export interface EshopData {
  heroTitle: LocalizedString;
  heroSubtitle: LocalizedString;
  heroImage?: string;
  memberBanner: {
    title: LocalizedString;
    description: LocalizedString;
    ctaText: LocalizedString;
    ctaLink: string;
    image?: string;
  };
  products: EshopProduct[];
  hotline: string;
}

// Sidebar Content
export interface SidebarContentItem {
  _id?: string;
  title: LocalizedString;
  image: string;
  link?: string;
  type: 'partner' | 'ad';
  placement: 'left' | 'right' | 'both';
  order: number;
  isActive: boolean;
  createdAt?: string;
  updatedAt?: string;
}

// Package
export interface Package {
  _id?: string;
  title: LocalizedString;
  image: string;
  link: string;
  order: number;
  isActive: boolean;
  createdAt?: string;
  updatedAt?: string;
}

// Pagination
export interface PaginatedResponse<T> {
  posts?: T[];
  pages?: T[];
  media?: T[];
  users?: T[];
  pagination: {
    page: number;
    limit: number;
    total: number;
    pages: number;
  };
}
