     public init(apiKey: String, networkFetch: NetworkFetch) {
         Injector.sharedInsatnce.apiKey = apiKey
         Injector.sharedInsatnce.networkFetch = networkFetch
-    }
-    
-    public func fetchNextPage(_ cursor: Cursor<Movie>, completion: @escaping ((Cursor<Movie>) -> ())) {
-        Logging.log("Fetch next page")
-        fetchTopMovies(on: cursor.nextPage(), completion: completion)
-    }
-    
-    public func detailsFor(movie: Movie, inclidedDetails details: Details = [], completion: @escaping (Movie?, Error?) -> ()) {
-        Logging.log("Fetch details for movie:\(movie)")
-        detailsFor(movieId: movie.id, inclidedDetails: details, completion: completion)
-    }
-
-    public func detailsFor(movieId: Int, inclidedDetails details: Details = [], completion: @escaping (Movie?, Error?) -> ()) {
-        Logging.log("Fetch details for movieId:\(movieId)")
-        let request = FetchDetailsRequest(movieId: movieId, includedDetails: details)
-        request.resulthandler = {
-            result, error in
-            
-            completion(result as? Movie, error)
-        }
-        runWithConfigCheck(request: request)
     }
     
     fileprivate func runWithConfigCheck(request: NetworkRequest) {

    }
}

// MAKR: -
// MARK: Top movies list
public extension TMDB {
    public func fetchTopMovies(on page: Int = 1, completion: @escaping ((Cursor<Movie>) -> ())) {
        Logging.log("Fetch top movies on page: \(page)")
        let listRequest = ListTopMoviesRequest(page: page)
        listRequest.resulthandler = {
            result, error in
            
            if let cursor = result as? Cursor<Movie> {
                completion(cursor)
            }
        }
        runWithConfigCheck(request: listRequest)
    }
}

// MARK: -
// MARK: Popular
public extension TMDB {
    public func popular(on page: Int = 1, completion: @escaping ((Cursor<Movie>) -> ())) {
        Logging.log("Fetch popular on page \(page)")
        let listRequest = ListPopularMoviesRequest(page: page)
        listRequest.resulthandler = {
            result, error in
            
            if let cursor = result as? Cursor<Movie> {
                completion(cursor)
            }
        }
        runWithConfigCheck(request: listRequest)
    }
}

// MARK: -
// MARK: Movie genres
public extension TMDB {
    public func listMovieGenres(completion: @escaping ([Genre]) -> ()) {
        let request = ListMovieGenresRequest()

    }
}

// MARK: - 
// MARK: Movie details
public extension TMDB {
    public func detailsFor(movie: Movie, inclidedDetails details: Details = [], completion: @escaping (Movie?, Error?) -> ()) {
        Logging.log("Fetch details for movie:\(movie)")
        detailsFor(movieId: movie.id, inclidedDetails: details, completion: completion)
    }
    
    public func detailsFor(movieId: Int, inclidedDetails details: Details = [], completion: @escaping (Movie?, Error?) -> ()) {
        Logging.log("Fetch details for movieId:\(movieId)")
        let request = FetchDetailsRequest(movieId: movieId, includedDetails: details)
        request.resulthandler = {
            result, error in
            
            completion(result as? Movie, error)
        }
        runWithConfigCheck(request: request)
    }
}

// MARK: -
// MARK: Lists
public extension TMDB {
