/**
 * Generated by orval v8.9.1 🍺
 * Do not edit manually.
 * Api
 * BookWithNesto shortlet apartment platform API
 * OpenAPI spec version: 0.1.0
 */
export interface HealthStatus {
  status: string;
}

export interface BookedDateRange {
  checkIn: string;
  checkOut: string;
  status: string;
}

export interface Apartment {
  id: number;
  name: string;
  slug?: string;
  city: string;
  state?: string;
  address?: string;
  description?: string;
  pricePerNight: number;
  bedrooms?: number;
  bathrooms?: number;
  maxGuests?: number;
  amenities?: string;
  images?: string;
  featured?: boolean;
  available: boolean;
  /** @nullable */
  rating?: number | null;
  reviewCount?: number;
  createdAt: string;
  updatedAt?: string;
}

export interface ApartmentInput {
  name: string;
  slug?: string;
  city: string;
  state?: string;
  address?: string;
  description?: string;
  pricePerNight: number;
  bedrooms?: number;
  bathrooms?: number;
  maxGuests?: number;
  amenities?: string;
  images?: string;
  featured?: boolean;
  available?: boolean;
}

export interface ApartmentUpdate {
  name?: string;
  slug?: string;
  city?: string;
  state?: string;
  address?: string;
  description?: string;
  pricePerNight?: number;
  bedrooms?: number;
  bathrooms?: number;
  maxGuests?: number;
  amenities?: string;
  images?: string;
  featured?: boolean;
  available?: boolean;
}

export interface AvailabilityUpdate {
  available: boolean;
}

export interface CityCount {
  city: string;
  count: number;
}

export interface Review {
  id: number;
  apartmentId: number;
  /** @nullable */
  userId?: string | null;
  guestName?: string;
  rating: number;
  comment: string;
  createdAt: string;
}

export interface ReviewInput {
  rating: number;
  comment: string;
  guestName: string;
  userId?: string;
}

export interface Booking {
  id: number;
  apartmentId: number;
  /** @nullable */
  userId?: string | null;
  guestName: string;
  guestEmail: string;
  guestPhone?: string;
  checkIn: string;
  checkOut: string;
  guests?: number;
  /** @nullable */
  totalPrice?: number | null;
  status: string;
  /** @nullable */
  notes?: string | null;
  createdAt: string;
}

export interface BookingInput {
  apartmentId: number;
  userId?: string;
  guestName: string;
  guestEmail: string;
  guestPhone?: string;
  checkIn: string;
  checkOut: string;
  guests?: number;
  notes?: string;
}

export interface BookingStatusUpdate {
  status: string;
}

export interface BlogPost {
  id: number;
  title: string;
  slug: string;
  /** @nullable */
  excerpt?: string | null;
  content?: string;
  /** @nullable */
  featuredImage?: string | null;
  /** @nullable */
  category?: string | null;
  /** @nullable */
  tags?: string | null;
  status: string;
  /** @nullable */
  metaTitle?: string | null;
  /** @nullable */
  metaDescription?: string | null;
  authorName?: string;
  createdAt: string;
  updatedAt?: string;
}

export interface BlogPostInput {
  title: string;
  slug?: string;
  excerpt?: string;
  content: string;
  featuredImage?: string;
  category?: string;
  tags?: string;
  status?: string;
  metaTitle?: string;
  metaDescription?: string;
  authorName?: string;
}

export interface BlogPostUpdate {
  title?: string;
  slug?: string;
  excerpt?: string;
  content?: string;
  featuredImage?: string;
  category?: string;
  tags?: string;
  status?: string;
  metaTitle?: string;
  metaDescription?: string;
  authorName?: string;
}

export interface ContactSubmission {
  id: number;
  type: string;
  name: string;
  email: string;
  /** @nullable */
  phone?: string | null;
  /** @nullable */
  subject?: string | null;
  message: string;
  /** @nullable */
  apartmentId?: number | null;
  status?: string;
  createdAt: string;
}

export interface ContactInput {
  type: string;
  name: string;
  email: string;
  phone?: string;
  subject?: string;
  message: string;
  apartmentId?: number;
}

export interface ContactStatusUpdate {
  status?: string;
}

export interface NewsletterInput {
  email: string;
  name?: string;
}

export interface NewsletterSubscriber {
  id: number;
  email: string;
  /** @nullable */
  name?: string | null;
  active?: boolean;
  createdAt: string;
}

export interface ChatMessage {
  id: number;
  /** @nullable */
  apartmentId?: number | null;
  sessionId?: string;
  /** @nullable */
  userId?: string | null;
  role: string;
  content: string;
  createdAt: string;
}

export interface ChatMessageInput {
  apartmentId?: number;
  sessionId: string;
  userId?: string;
  role: string;
  content: string;
}

export interface GalleryImage {
  id: number;
  /** @nullable */
  apartmentId?: number | null;
  url: string;
  /** @nullable */
  caption?: string | null;
  /** @nullable */
  category?: string | null;
  sortOrder?: number;
  createdAt: string;
}

export interface GalleryImageInput {
  apartmentId?: number;
  url: string;
  caption?: string;
  category?: string;
  sortOrder?: number;
}

export interface ServicePackage {
  id: number;
  serviceType: string;
  name: string;
  priceDisplay: string;
  /** @nullable */
  priceAmount?: number | null;
  /** @nullable */
  duration?: string | null;
  /** @nullable */
  description?: string | null;
  features?: string;
  isPopular?: boolean;
  sortOrder: number;
  active: boolean;
  updatedAt?: string;
}

export interface ServicePackageUpdate {
  name?: string;
  priceDisplay?: string;
  priceAmount?: number;
  duration?: string;
  description?: string;
  features?: string;
  isPopular?: boolean;
  active?: boolean;
}

export interface DashboardStats {
  totalApartments: number;
  availableApartments: number;
  totalBookings: number;
  pendingBookings?: number;
  totalContacts: number;
  totalBlogPosts: number;
  totalReviews: number;
  /** @nullable */
  avgRating?: number | null;
}

export interface CityStats {
  city: string;
  count: number;
  avgPrice: number;
}

export type ListApartmentsParams = {
city?: string;
minPrice?: number;
maxPrice?: number;
bedrooms?: number;
amenities?: string;
available?: boolean;
page?: number;
limit?: number;
};

export type ListBlogPostsParams = {
page?: number;
limit?: number;
category?: string;
};

export type ListChatMessagesParams = {
/**
 * @nullable
 */
apartmentId?: number | null;
sessionId?: string;
};

export type ListGalleryImagesParams = {
/**
 * @nullable
 */
apartmentId?: number | null;
category?: string;
};

export type ListServicePackagesParams = {
serviceType?: string;
};

