types/api/events.ts

import { Performer, PerformerCategory } from "./performers";

/**
 * TickPick.API.Models.Events.SearchEventsDataFeedResponse
 */
export interface SearchEventsDataFeedResponse {
  events: DataFeedEventResponse[];
  featured_events: DataFeedEventResponse[];
  return_code: string;
  message: string;
  client_message: string;
  // generated by workers
  favorite_performer?: Performer;
}

export type EventTag = "HotEvent" | "RisingEvent" | "FeaturedEvent";

export interface DataFeedEventResponse {
  event_id: string;
  display_name: string;
  event_date: string;
  city: string;
  state: string;
  event_name: string;
  main_performer: Performer;
  secondary_performers: Performer[];
  event_tags?: EventTag[];
  tags?: { type: EventTag; precedence?: number }[];
  is_favorited?: boolean; // added by workers for iterable
  Category: PerformerCategory;

  // generated by workers
  is_home_standing?: boolean;
}

export type EventInventoryStat = {
  event_id: string;
  count: number;
  max: number;
  min: number;
  ave: number;
};

/**
 * TickPick.API.Models.Entities.EventResponse
 */
export interface EventResponse {
  event_id: string;
  mid: string;
  shid: string;
  display_name: string;
  description: string;
  event_date: string;
  event_date_utc: string;
  city: string;
  state: string;
  can_post_highlights: boolean;
  has_highlights: boolean;
  mobile_transfer_strict: boolean;
  account_transfer_strict: boolean;
  has_map: boolean;
  event_name: string;
  event_type: string;
  child_category: string;
  grandchild_category: string;
  main_performer: Performer;
  secondary_performers: Performer[];
  venue: any;
  venue_configuration: any;
  buy_url: string;
  stats: EventInventoryStat | null;
  status: string;
  original_event_date: string;
  allow_splits: boolean;
  sms_transfer_only: boolean;
  short_name: string;
  event_promotions: any[];
  event_tags: string[];
  tags?: { type: string; precedence?: number }[];
}