interface SetProps {
  id: string;
  name: string;
  _self: string;
}

export interface CardProps {
  name: string;
  rarity: string;
  type: string;
  cost: number;
  power: number;
  health: number;
  set: SetProps;
  collectible: boolean;
  soulSummon: number;
  soulTrap: number;
  text: string;
  subtypes: string[];
  attributes: string[];
  keywords: string[];
  unique: boolean;
  imageUrl: string;
  id: string;
}

interface LinkProps {
  next?: string;
  prev?: string;
}

export interface CardRequestProps {
  cards: CardProps[];
  _links: LinkProps;
  _pageSize: number;
  _totalCount: number;
}

export interface CardState {
  cards: CardProps[];
  first: string | null;
  next: string | null;
  maxCards: number;
}

export type CardStateHandler = [CardState, Function];
