//
//  ContentMainTabContentRepository.swift
//  SodaLive
//
//  Created by klaus on 2/21/25.
//

import Foundation
import CombineMoya
import Combine
import Moya

final class ContentMainTabContentRepository {
    
    private let api = MoyaProvider<ContentApi>()
    
    func getContentMainContent() -> AnyPublisher<Response, MoyaError> {
        return api.requestPublisher(
            .getContentMainContent(
                isAdultContentVisible: UserDefaults.isAdultContentVisible(),
                contentType: ContentType(rawValue: UserDefaults.string(forKey: .contentPreference)) ?? ContentType.ALL
            )
        )
    }
    
    func getNewContentOfTheme(theme: String) -> AnyPublisher<Response, MoyaError> {
        return api.requestPublisher(
            .getContentMainNewContentOfTheme(
                theme: theme,
                isAdultContentVisible: UserDefaults.isAdultContentVisible(),
                contentType: ContentType(rawValue: UserDefaults.string(forKey: .contentPreference)) ?? ContentType.ALL
            )
        )
    }
    
    func getContentRanking(sortType: String) -> AnyPublisher<Response, MoyaError> {
        return api.requestPublisher(
            .getDailyContentRanking(
                sortType: sortType,
                isAdultContentVisible: UserDefaults.isAdultContentVisible(),
                contentType: ContentType(rawValue: UserDefaults.string(forKey: .contentPreference)) ?? ContentType.ALL
            )
        )
    }
    
    func getRecommendContentByTag(tag: String) -> AnyPublisher<Response, MoyaError> {
        return api.requestPublisher(
            .getRecommendContentByTag(
                tag: tag,
                contentType: ContentType(rawValue: UserDefaults.string(forKey: .contentPreference)) ?? ContentType.ALL
            )
        )
    }
    
    func getPopularContentByCreator(creatorId: Int) -> AnyPublisher<Response, MoyaError> {
        return api.requestPublisher(
            .getContentMainContentPopularContentByCreator(
                creatorId: creatorId,
                isAdultContentVisible: UserDefaults.isAdultContentVisible(),
                contentType: ContentType(rawValue: UserDefaults.string(forKey: .contentPreference)) ?? ContentType.ALL
            )
        )
    }
}
