//
//  SeriesRepository.swift
//  SodaLive
//
//  Created by klaus on 4/29/24.
//

import Foundation
import CombineMoya
import Combine
import Moya

class SeriesRepository {
    private let api = MoyaProvider<SeriesApi>()
    
    func getSeriesList(creatorId: Int, sortType: SeriesListAllViewModel.SeriesSortType, page: Int, size: Int) -> AnyPublisher<Response, MoyaError> {
        return api.requestPublisher(
            .getSeriesList(
                creatorId: creatorId,
                sortType: sortType,
                isAdultContentVisible: UserDefaults.isAdultContentVisible(),
                contentType: ContentType(rawValue: UserDefaults.string(forKey: .contentPreference)) ?? ContentType.ALL,
                page: page,
                size: size
            )
        )
    }
    
    func getSeriesDetail(seriesId: Int) -> AnyPublisher<Response, MoyaError> {
        return api.requestPublisher(
            .getSeriesDetail(
                seriesId: seriesId,
                isAdultContentVisible: UserDefaults.isAdultContentVisible()
            )
        )
    }
    
    func getSeriesContentList(seriesId: Int, page: Int, size: Int, sortType: SeriesListAllViewModel.SeriesSortType) -> AnyPublisher<Response, MoyaError> {
        return api.requestPublisher(
            .getSeriesContentList(
                seriesId: seriesId,
                isAdultContentVisible: UserDefaults.isAdultContentVisible(),
                page: page,
                size: size,
                sortType: sortType
            )
        )
    }
    
    func getRecommendSeriesList() -> AnyPublisher<Response, MoyaError> {
        return api.requestPublisher(
            .getRecommendSeriesList(
                isAdultContentVisible: UserDefaults.isAdultContentVisible(),
                contentType: ContentType(rawValue: UserDefaults.string(forKey: .contentPreference)) ?? ContentType.ALL
            )
        )
    }
}