// Path: src/main/java/com/uwetrottmann/tmdb2/entities/Images.java
// public class Images {
// 
//     public Integer id;
//     public List<Image> backdrops;
//     public List<Image> posters;
//     public List<Image> stills;
// 
// }
// 
// Path: src/main/java/com/uwetrottmann/tmdb2/entities/TmdbDate.java
// public class TmdbDate {
// 
//     // can not use ThreadLocal.withInitial as it requires Java 8
//     private static final ThreadLocal<DateFormat> TMDB_DATE_FORMAT = new ThreadLocal<DateFormat>() {
//         @Override
//         public DateFormat initialValue() {
//             return new SimpleDateFormat(TmdbHelper.TMDB_DATE_PATTERN);
//         }
//     };
// 
//     private final Date date;
// 
//     public TmdbDate(Date date) {
//         this.date = date;
//     }
// 
//     public TmdbDate(String date) {
//         Date parsedDate;
//         try {
//             parsedDate = TMDB_DATE_FORMAT.get().parse(date);
//         } catch (ParseException e) {
//             parsedDate = null;
//         }
//         this.date = parsedDate;
//     }
// 
//     @Override
//     public String toString() {
//         return TMDB_DATE_FORMAT.get().format(date);
//     }
// 
// }
// 
// Path: src/main/java/com/uwetrottmann/tmdb2/entities/TvEpisode.java
// public class TvEpisode extends BaseTvEpisode {
// 
//     public List<CrewMember> crew;
// 
//     public List<CastMember> guest_stars;
// 
// 
//     public Images images;
//     public TvEpisodeExternalIds external_ids;
//     public Credits credits;
//     public Videos videos;
//     public Translations translations;
// 
// }
// 
// Path: src/main/java/com/uwetrottmann/tmdb2/entities/TvEpisodeExternalIds.java
// public class TvEpisodeExternalIds {
// 
//     public Integer id;
//     public String imdb_id;
//     public Integer tvdb_id;
//     public String freebase_id;
//     public String freebase_mid;
//     public Integer tvrage_id;
// 
// 
// }
// 
// Path: src/main/java/com/uwetrottmann/tmdb2/entities/Videos.java
// public class Videos {
// 
//     public static class Video {
// 
//         public String id;
//         public String iso_639_1;
//         public String iso_3166_1;
//         public String key;
//         public String name;
//         public String site;
//         public Integer size;
//         public VideoType type;
// 
//     }
// 
//     public Integer id;
//     public List<Video> results;
// 
// }


import com.uwetrottmann.tmdb2.entities.AppendToResponse;
import com.uwetrottmann.tmdb2.entities.BaseAccountStates;
import com.uwetrottmann.tmdb2.entities.Changes;
import com.uwetrottmann.tmdb2.entities.Credits;
import com.uwetrottmann.tmdb2.entities.Images;
import com.uwetrottmann.tmdb2.entities.RatingObject;
import com.uwetrottmann.tmdb2.entities.Status;
import com.uwetrottmann.tmdb2.entities.TmdbDate;
import com.uwetrottmann.tmdb2.entities.TvEpisode;
import com.uwetrottmann.tmdb2.entities.TvEpisodeExternalIds;
import com.uwetrottmann.tmdb2.entities.Videos;
import java.util.Map;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.DELETE;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;
package com.uwetrottmann.tmdb2.services;


public interface TvEpisodesService {

    /**
     * Get the primary information about a TV episode by combination of a season and episode number.
     *
     * @param tvShowId            A Tv Show TMDb id.
     * @param tvShowSeasonNumber  TvSeason Number.
     * @param tvShowEpisodeNumber TvEpisode Number.
     * @param language            <em>Optional.</em> ISO 639-1 code.
     */
    @GET("tv/{tv_id}/season/{season_number}/episode/{episode_number}")
    Call<TvEpisode> episode(
            @Path("tv_id") int tvShowId,
            @Path("season_number") int tvShowSeasonNumber,
            @Path("episode_number") int tvShowEpisodeNumber,
            @Query("language") String language
    );

    /**
     * Get the primary information about a TV episode by combination of a season and episode number.
     *
     * @param tvShowId            A Tv Show TMDb id.
     * @param tvShowSeasonNumber  TvSeason Number.
     * @param tvShowEpisodeNumber TvEpisode Number.
     * @param language            <em>Optional.</em> ISO 639-1 code.
     * @param appendToResponse    <em>Optional.</em> extra requests to append to the result.
     */
    @GET("tv/{tv_id}/season/{season_number}/episode/{episode_number}")
    Call<TvEpisode> episode(
            @Path("tv_id") int tvShowId,
            @Path("season_number") int tvShowSeasonNumber,
            @Path("episode_number") int tvShowEpisodeNumber,
            @Query("language") String language,
            @Query("append_to_response") AppendToResponse appendToResponse
    );

    /**
     * Get the primary information about a TV episode by combination of a season and episode number.
     *
     * @param tvShowId            A Tv Show TMDb id.
     * @param tvShowSeasonNumber  TvSeason Number.
     * @param tvShowEpisodeNumber TvEpisode Number.
     * @param language            <em>Optional.</em> ISO 639-1 code.
     * @param appendToResponse    <em>Optional.</em> extra requests to append to the result.
     * @param options             <em>Optional.</em> parameters for the appended extra results.
     */
    @GET("tv/{tv_id}/season/{season_number}/episode/{episode_number}")
    Call<TvEpisode> episode(
            @Path("tv_id") int tvShowId,
            @Path("season_number") int tvShowSeasonNumber,
// Path: src/main/java/com/uwetrottmann/tmdb2/entities/Images.java
// public class Images {
// 
//     public Integer id;
//     public List<Image> backdrops;
//     public List<Image> posters;
//     public List<Image> stills;
// 
// }
// 
// Path: src/main/java/com/uwetrottmann/tmdb2/entities/TmdbDate.java
// public class TmdbDate {
// 
//     // can not use ThreadLocal.withInitial as it requires Java 8
//     private static final ThreadLocal<DateFormat> TMDB_DATE_FORMAT = new ThreadLocal<DateFormat>() {
//         @Override
//         public DateFormat initialValue() {
//             return new SimpleDateFormat(TmdbHelper.TMDB_DATE_PATTERN);
//         }
//     };
// 
//     private final Date date;
// 
//     public TmdbDate(Date date) {
//         this.date = date;
//     }
// 
//     public TmdbDate(String date) {
//         Date parsedDate;
//         try {
//             parsedDate = TMDB_DATE_FORMAT.get().parse(date);
//         } catch (ParseException e) {
//             parsedDate = null;
//         }
//         this.date = parsedDate;
//     }
// 
//     @Override
//     public String toString() {
//         return TMDB_DATE_FORMAT.get().format(date);
//     }
// 
// }
// 
// Path: src/main/java/com/uwetrottmann/tmdb2/entities/TvEpisode.java
// public class TvEpisode extends BaseTvEpisode {
// 
//     public List<CrewMember> crew;
// 
//     public List<CastMember> guest_stars;
// 
// 
//     public Images images;
//     public TvEpisodeExternalIds external_ids;
//     public Credits credits;
//     public Videos videos;
//     public Translations translations;
// 
// }
// 
// Path: src/main/java/com/uwetrottmann/tmdb2/entities/TvEpisodeExternalIds.java
// public class TvEpisodeExternalIds {
// 
//     public Integer id;
//     public String imdb_id;
//     public Integer tvdb_id;
//     public String freebase_id;
//     public String freebase_mid;
//     public Integer tvrage_id;
// 
// 
// }
// 
// Path: src/main/java/com/uwetrottmann/tmdb2/entities/Videos.java
// public class Videos {
// 
//     public static class Video {
// 
//         public String id;
//         public String iso_639_1;
//         public String iso_3166_1;
//         public String key;
//         public String name;
//         public String site;
//         public Integer size;
//         public VideoType type;
// 
//     }
// 
//     public Integer id;
//     public List<Video> results;
// 
// }


// Path: src/main/java/com/uwetrottmann/tmdb2/services/TvEpisodesService.java
import com.uwetrottmann.tmdb2.entities.AppendToResponse;
import com.uwetrottmann.tmdb2.entities.BaseAccountStates;
import com.uwetrottmann.tmdb2.entities.Changes;
import com.uwetrottmann.tmdb2.entities.Credits;
import com.uwetrottmann.tmdb2.entities.Images;
import com.uwetrottmann.tmdb2.entities.RatingObject;
import com.uwetrottmann.tmdb2.entities.Status;
import com.uwetrottmann.tmdb2.entities.TmdbDate;
import com.uwetrottmann.tmdb2.entities.TvEpisode;
import com.uwetrottmann.tmdb2.entities.TvEpisodeExternalIds;
import com.uwetrottmann.tmdb2.entities.Videos;
import java.util.Map;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.DELETE;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;

package com.uwetrottmann.tmdb2.services;


public interface TvEpisodesService {

    /**
     * Get the primary information about a TV episode by combination of a season and episode number.
     *
     * @param tvShowId            A Tv Show TMDb id.
     * @param tvShowSeasonNumber  TvSeason Number.
     * @param tvShowEpisodeNumber TvEpisode Number.
     * @param language            <em>Optional.</em> ISO 639-1 code.
     */
    @GET("tv/{tv_id}/season/{season_number}/episode/{episode_number}")
    Call<TvEpisode> episode(
            @Path("tv_id") int tvShowId,
            @Path("season_number") int tvShowSeasonNumber,
            @Path("episode_number") int tvShowEpisodeNumber,
            @Query("language") String language
    );

    /**
     * Get the primary information about a TV episode by combination of a season and episode number.
     *
     * @param tvShowId            A Tv Show TMDb id.
     * @param tvShowSeasonNumber  TvSeason Number.
     * @param tvShowEpisodeNumber TvEpisode Number.
     * @param language            <em>Optional.</em> ISO 639-1 code.
     * @param appendToResponse    <em>Optional.</em> extra requests to append to the result.
     */
    @GET("tv/{tv_id}/season/{season_number}/episode/{episode_number}")
    Call<TvEpisode> episode(
            @Path("tv_id") int tvShowId,
            @Path("season_number") int tvShowSeasonNumber,
            @Path("episode_number") int tvShowEpisodeNumber,
            @Query("language") String language,
            @Query("append_to_response") AppendToResponse appendToResponse
    );

    /**
     * Get the primary information about a TV episode by combination of a season and episode number.
     *
     * @param tvShowId            A Tv Show TMDb id.
     * @param tvShowSeasonNumber  TvSeason Number.
     * @param tvShowEpisodeNumber TvEpisode Number.
     * @param language            <em>Optional.</em> ISO 639-1 code.
     * @param appendToResponse    <em>Optional.</em> extra requests to append to the result.
     * @param options             <em>Optional.</em> parameters for the appended extra results.
     */
    @GET("tv/{tv_id}/season/{season_number}/episode/{episode_number}")
    Call<TvEpisode> episode(
            @Path("tv_id") int tvShowId,
            @Path("season_number") int tvShowSeasonNumber,
            @Path("episode_number") int tvShowEpisodeNumber,