declare module "metarare" {
  import {
    ECurrencyType,
    EItemType,
    EActivity,
    ESaleType,
    ESaleStatus,
    ENetworkType,
  } from "@src/constants/Enums";

  export interface IHome {
    collections: ICollection[];
    curating_list: INFT[];
    explore: INFT[];
    hot_bids: INFT[];
    special_bids: INFT[];
    time_auctions: INFT[];
  }

  export interface IActivity {
    from_address: string;
    from_user_profile: string;
    from_user_name: string;
    is_cancel: boolean;
    log_relation_id: number;
    log_type: EActivity;
    price: string;
    sale_uid: number;
    to_address: string;
    to_user_name: string;
    to_user_profile: string;
    token_content_url: string;
    token_name: string;
    tx: string;
    created_at: string;
    currency: ECurrencyType;
    sale_id: number;
    token_id: number;
    from_user_is_artist: boolean;
    to_user_is_artist: boolean;
  }

  export interface ICollection {
    contract_address: string;
    cover_image: string;
    curating_number: number;
    description: string;
    highest_sale_price: number;
    id: number;
    is_official: boolean;
    is_owner: boolean;
    items: number;
    market_cap: number;
    name: string;
    recent_trading_day: string;
    status: ESaleStatus;
    symbol: string;
    thumbnail_image: string;
    total_like_count: number;
    total_volume: number;
    user_name: string;
    cover_image: string;
  }

  export interface ICollectionBaseInfo {
    id: number;
    name: string;
    description: string;
    contract_address: string;
    thumbnail_image: string;
    cover_image: string;
    is_official: boolean;
    user_name: string;
    items: number;
    highest_sale_price: number;
    market_cap: number;
    total_volume: number;
    is_owner: boolean;
  }

  export interface INFT {
    collection_id: number;
    collection_thumbnail_image: string;
    content_title: string;
    content_url: string;
    current_price: number;
    current_currency: ECurrencyType;
    item_index: number;
    lastest_currency: ECurrencyType;
    lastest_price: number;
    owner_name: string;
    owner_thumbnail_image: string;
    sale_type: ESaleType;
    total_count: number;
    user_id: number;
    sale_id: number;
    token_id: number;
    likes: number;
    is_like: boolean;
    end_at: string;
    highest_price: number;
    start_price: number;
    created_at: number;
    collection_name: string;
    fixed_price: number;
    sale_status: ESaleStatus;
  }

  export interface IUserInfo {
    settings: {
      network_commission: number;
      service_commission: number;
    };
    simple_profile: {
      address: string;
      cover_image: string;
      description: string;
      email: string;
      eth_balance: number;
      is_artist: boolean;
      mf_balance: number;
      mr_balance: number;
      name: string;
      thumbnail_image: string;
      twitter: string;
      user_id: number;
      available_eth_balance: number;
      available_mf_balance: number;
      available_mr_balance: number;
    };
  }

  export interface IProfile {
    cover_image: string;
    thumbnail_image: string;
    is_artist: boolean;
    name: string;
    address: string;
    description: string;
    twitter: string;
    id: number;
    email: string;
    is_owner: boolean;
  }

  export interface ITrait {
    created_at: string;
    deleted_at: string;
    id: number;
    key: string;
    token_id: number;
    updated_at: string;
    value: string;
  }

  export interface ISaleDetail {
    id: number;
    token_id: number;
    token_type: EItemType;
    content_url: string;
    name: string;
    description: string;
    sale_type: ESaleType;
    price: number;
    highest_price: number;
    my_bidding_price: number;
    start_price: number;
    start_at: string;
    end_at: string;
    royalties: number;
    artist_profile_image: string;
    artist_name: string;
    like_count: number;
    collection_thumbnail_image: string;
    collection_name: string;
    user_profile_image: string;
    user_name: string;
    network: string;
    currency: ECurrencyType;
    is_owner: boolean;
    is_like: boolean;
    total_count: number;
    token_uid: string;
    index: number;
    status: ESaleStatus;
    collection_is_official: boolean;
    artist_is_official: boolean;
    owner_is_official: boolean;
  }

  export interface ISale {
    sale: ISaleDetail;
    traits: ITrait[];
  }

  export interface ISaleRanking {
    artist_id: number;
    thumbnail_image: string;
    cover_image: string;
    name: string;
    category: string;
    amounts_sale: number;
    rank: number
  }

  export interface ITokenDetail {
    id: number; // tokenId
    type: EItemType; // token_type
    content_url: string;
    name: string;
    description: string;
    royalties: number;
    artist_profile_image: string;
    artist_name: string;
    like_count: number;
    collection_name: string;
    collection_thumbnail_image: string;
    collection_is_official: boolean;
    user_profile_image: string;
    user_name: string;
    network: string;
    is_owner: boolean;
    is_like: boolean;
    total_count: number;
    index: number;
    artist_is_official: boolean;
    owner_is_official: boolean;
    uid: string; // token uid
  }

  export interface IToken {
    token: ITokenDetail;
    traits: ITrait[];
  }

  export interface ITokenCollection {
    collection_id: number;
    is_official: boolean;
    name: string;
    thumbnail_image: string;
  }

  export interface ITokenBaseInfo {
    collection: ITokenCollection[];
    commission: number;
  }

  export interface ILog {
    from_address: string;
    from_user_profile: string;
    from_user_name: string;
    from_user_is_artist: boolean;
    is_cancel: boolean;
    log_relation_id: number;
    log_type: string;
    price: string;
    sale_uid: string;
    to_address: string;
    to_user_name: string;
    to_user_profile: string;
    token_content_url: string;
    token_name: string;
    tx: string;
    created_at: string;
    is_official: boolean;
    currency: ECurrencyType;
  }

  export interface IOwner {
    index: number;
    name: string;
    thumbnail_image: string;
    total_count: number;
    updated_at: string;
    token_id: number;
    is_official: boolean;
  }

  export interface IResaleInfo {
    token: {
      collection_id: number;
      collection_is_official: boolean;
      collection_name: string;
      collection_thumbnail_image: string;
      commission: number;
      content_url: string;
      description: string;
      name: string;
      network: ENetworkType;
      royalties: number;
      token_id: number;
      total_count: number;
      type: EItemType;
    };
    traits: ITrait[];
  }

  export interface IFilter {
    category?: string;
    collection_name?: string;
    currency?: ECurrencyType | "";
    currency_amount_end?: string;
    currency_amount_start?: string;
    limit?: number;
    network?: string;
    offset?: number;
    sale_status?: string;
    sale_type?: string;
    token_name?: string;
    authentication_number?: number;
  }

  export interface IBidHistory {
    thumbnail_image: string;
    name: string;
    price: number;
    is_cancel: boolean;
    currency: ECurrencyType;
    created_at: string;
    is_official: boolean;
  }

  export interface IArtist {
    ID: number;
    UserID: number;
    Team: string;
    Category: string;
    ThumbnailImage: string;
  }
}

declare module "*.svg";
declare module '*.scss';
declare module '*.module.scss' {
    const classes: { [key: string]: string };
    export default classes;
}
