package main

import (
    "time"
)

type spotifyTrack struct {
    Album struct {
        AlbumType string `json:"album_type"`
        Artists   []struct {
            ExternalUrls struct {
                Spotify string `json:"spotify"`
            } `json:"external_urls"`
            Href string `json:"href"`
            ID   string `json:"id"`
            Name string `json:"name"`
            Type string `json:"type"`
            URI  string `json:"uri"`
        } `json:"artists"`
        AvailableMarkets []string `json:"available_markets"`
        ExternalUrls     struct {
            Spotify string `json:"spotify"`
        } `json:"external_urls"`
        Href   string `json:"href"`
        ID     string `json:"id"`
        Images []struct {
            Height int    `json:"height"`
            URL    string `json:"url"`
            Width  int    `json:"width"`
        } `json:"images"`
        Name string `json:"name"`
        Type string `json:"type"`
        URI  string `json:"uri"`
    } `json:"album"`
    Artists []struct {
        ExternalUrls struct {
            Spotify string `json:"spotify"`
        } `json:"external_urls"`
        Href string `json:"href"`
        ID   string `json:"id"`
        Name string `json:"name"`
        Type string `json:"type"`
        URI  string `json:"uri"`
    } `json:"artists"`
    AvailableMarkets []string `json:"available_markets"`
    DiscNumber       int      `json:"disc_number"`
    DurationMs       int      `json:"duration_ms"`
    Explicit         bool     `json:"explicit"`
    ExternalIds      struct {
        Isrc string `json:"isrc"`
    } `json:"external_ids"`
    ExternalUrls struct {
        Spotify string `json:"spotify"`
    } `json:"external_urls"`
    Href        string `json:"href"`
    ID          string `json:"id"`
    Name        string `json:"name"`
    Popularity  int    `json:"popularity"`
    PreviewURL  string `json:"preview_url"`
    TrackNumber int    `json:"track_number"`
    Type        string `json:"type"`
    URI         string `json:"uri"`
    IsLocal    bool `json:"is_local"`
}

type spotifyPlaylist struct {
    Collaborative bool        `json:"collaborative"`
    Description   interface{} `json:"description"`
    ExternalUrls  struct {
        Spotify string `json:"spotify"`
    } `json:"external_urls"`
    Followers struct {
        Href  interface{} `json:"href"`
        Total int         `json:"total"`
    } `json:"followers"`
    Href   string `json:"href"`
    ID     string `json:"id"`
    Images []struct {
        Height int    `json:"height"`
        URL    string `json:"url"`
        Width  int    `json:"width"`
    } `json:"images"`
    Name  string `json:"name"`
    Owner struct {
        DisplayName  interface{} `json:"display_name"`
        ExternalUrls struct {
            Spotify string `json:"spotify"`
        } `json:"external_urls"`
        Href string `json:"href"`
        ID   string `json:"id"`
        Type string `json:"type"`
        URI  string `json:"uri"`
    } `json:"owner"`
    Public     bool   `json:"public"`
    SnapshotID string `json:"snapshot_id"`
    Tracks     struct {
        Href  string `json:"href"`
        Items []struct {
            AddedAt time.Time `json:"added_at"`
            AddedBy struct {
                ExternalUrls struct {
                    Spotify string `json:"spotify"`
                } `json:"external_urls"`
                Href string `json:"href"`
                ID   string `json:"id"`
                Type string `json:"type"`
                URI  string `json:"uri"`
            } `json:"added_by"`
            IsLocal bool `json:"is_local"`
            Track   struct {
                Album struct {
                    AlbumType string `json:"album_type"`
                    Artists   []struct {
                        ExternalUrls struct {
                            Spotify string `json:"spotify"`
                        } `json:"external_urls"`
                        Href string `json:"href"`
                        ID   string `json:"id"`
                        Name string `json:"name"`
                        Type string `json:"type"`
                        URI  string `json:"uri"`
                    } `json:"artists"`
                    AvailableMarkets []interface{} `json:"available_markets"`
                    ExternalUrls     struct {
                        Spotify string `json:"spotify"`
                    } `json:"external_urls"`
                    Href   string `json:"href"`
                    ID     string `json:"id"`
                    Images []struct {
                        Height int    `json:"height"`
                        URL    string `json:"url"`
                        Width  int    `json:"width"`
                    } `json:"images"`
                    Name string `json:"name"`
                    Type string `json:"type"`
                    URI  string `json:"uri"`
                } `json:"album"`
                Artists []struct {
                    ExternalUrls struct {
                        Spotify string `json:"spotify"`
                    } `json:"external_urls"`
                    Href string `json:"href"`
                    ID   string `json:"id"`
                    Name string `json:"name"`
                    Type string `json:"type"`
                    URI  string `json:"uri"`
                } `json:"artists"`
                AvailableMarkets []interface{} `json:"available_markets"`
                DiscNumber       int           `json:"disc_number"`
                DurationMs       int           `json:"duration_ms"`
                Explicit         bool          `json:"explicit"`
                ExternalIds      struct {
                    Isrc string `json:"isrc"`
                } `json:"external_ids"`
                ExternalUrls struct {
                    Spotify string `json:"spotify"`
                } `json:"external_urls"`
                Href        string      `json:"href"`
                ID          string      `json:"id"`
                Name        string      `json:"name"`
                Popularity  int         `json:"popularity"`
                PreviewURL  interface{} `json:"preview_url"`
                TrackNumber int         `json:"track_number"`
                Type        string      `json:"type"`
                URI         string      `json:"uri"`
            } `json:"track"`
        } `json:"items"`
        Limit    int         `json:"limit"`
        Next     string `json:"next"`
        Offset   int         `json:"offset"`
        Previous interface{} `json:"previous"`
        Total    int         `json:"total"`
    } `json:"tracks"`
    Type string `json:"type"`
    URI  string `json:"uri"`
}

type spotifyPlaylistsOfUser struct {
    Href  string `json:"href"`
    Items []struct {
        Collaborative bool `json:"collaborative"`
        ExternalUrls  struct {
            Spotify string `json:"spotify"`
        } `json:"external_urls"`
        Href   string `json:"href"`
        ID     string `json:"id"`
        Images []struct {
            Height int    `json:"height"`
            URL    string `json:"url"`
            Width  int    `json:"width"`
        } `json:"images"`
        Name  string `json:"name"`
        Owner struct {
            DisplayName  interface{} `json:"display_name"`
            ExternalUrls struct {
                Spotify string `json:"spotify"`
            } `json:"external_urls"`
            Href string `json:"href"`
            ID   string `json:"id"`
            Type string `json:"type"`
            URI  string `json:"uri"`
        } `json:"owner"`
        Public     bool   `json:"public"`
        SnapshotID string `json:"snapshot_id"`
        Tracks     struct {
            Href  string `json:"href"`
            Total int    `json:"total"`
        } `json:"tracks"`
        Type string `json:"type"`
        URI  string `json:"uri"`
    } `json:"items"`
    Limit    int         `json:"limit"`
    Next     *string      `json:"next"`
    Offset   int         `json:"offset"`
    Previous interface{} `json:"previous"`
    Total    int         `json:"total"`
}

type spotifyPlaylistsTracks struct {
    Href  string `json:"href"`
    Items []struct {
        AddedAt time.Time `json:"added_at"`
        AddedBy struct {
            ExternalUrls struct {
                Spotify string `json:"spotify"`
            } `json:"external_urls"`
            Href string `json:"href"`
            ID   string `json:"id"`
            Type string `json:"type"`
            URI  string `json:"uri"`
        } `json:"added_by"`
        IsLocal bool `json:"is_local"`
        Track   struct {
            Album struct {
                AlbumType string `json:"album_type"`
                Artists   []struct {
                    ExternalUrls struct {
                        Spotify string `json:"spotify"`
                    } `json:"external_urls"`
                    Href string `json:"href"`
                    ID   string `json:"id"`
                    Name string `json:"name"`
                    Type string `json:"type"`
                    URI  string `json:"uri"`
                } `json:"artists"`
                AvailableMarkets []interface{} `json:"available_markets"`
                ExternalUrls     struct {
                    Spotify string `json:"spotify"`
                } `json:"external_urls"`
                Href   string `json:"href"`
                ID     string `json:"id"`
                Images []struct {
                    Height int    `json:"height"`
                    URL    string `json:"url"`
                    Width  int    `json:"width"`
                } `json:"images"`
                Name string `json:"name"`
                Type string `json:"type"`
                URI  string `json:"uri"`
            } `json:"album"`
            Artists []struct {
                ExternalUrls struct {
                    Spotify string `json:"spotify"`
                } `json:"external_urls"`
                Href string `json:"href"`
                ID   string `json:"id"`
                Name string `json:"name"`
                Type string `json:"type"`
                URI  string `json:"uri"`
            } `json:"artists"`
            AvailableMarkets []interface{} `json:"available_markets"`
            DiscNumber       int           `json:"disc_number"`
            DurationMs       int           `json:"duration_ms"`
            Explicit         bool          `json:"explicit"`
            ExternalIds      struct {
                Isrc string `json:"isrc"`
            } `json:"external_ids"`
            ExternalUrls struct {
                Spotify string `json:"spotify"`
            } `json:"external_urls"`
            Href        string      `json:"href"`
            ID          string      `json:"id"`
            Name        string      `json:"name"`
            Popularity  int         `json:"popularity"`
            PreviewURL  interface{} `json:"preview_url"`
            TrackNumber int         `json:"track_number"`
            Type        string      `json:"type"`
            URI         string      `json:"uri"`
        } `json:"track"`
    } `json:"items"`
    Limit    int         `json:"limit"`
    Next     *string      `json:"next"`
    Offset   int         `json:"offset"`
    Previous *string    `json:"previous"`
    Total    int         `json:"total"`
}