import ComposableArchitecture
import FeatureOmniPlayer
import SunoModelClient
import APIClient
import Utilities

extension RootCoordinatorV1 {

    func launchOmniPlayer(
        state: inout State,
        clip: Clip,
        queue: [Clip],
        isExpanded: Bool = false,
        prompt: Prompt? = nil,
        autoStart: Bool = true,
        context: SessionContext
    ) -> Effect<Action> {
        state.playerDestination = .omniPlayer(
            .init(
                clip: clip,
                queue: queue,
                me: state.$me,
                isExpanded: isExpanded,
                prompt: prompt,
                autoStart: autoStart,
                context: context
            )
        )
        return .send(.playerDestination(.presented(.omniPlayer(.prepareQueueAndPlay))))
    }

    func togglePlayPauseOmniPlayer(state: State) -> Effect<Action> {
        guard state.playerDestination != nil else {
            return .none
        }

        return .send(.playerDestination(.presented(.omniPlayer(.togglePlayPause))))
    }

    func playClipAtIndexOmniPlayer(state: State, index: Int, isExpanded: Bool = false) -> Effect<Action> {
        guard state.playerDestination != nil else {
            return .none
        }

        return .send(.playerDestination(.presented(.omniPlayer(.playClip(at: index, isExpanded: isExpanded)))))
    }

    func setExpandedOmniPlayer(state: State, expanded: Bool) -> Effect<Action> {
        guard state.playerDestination != nil else {
            return .none
        }

        return .send(.playerDestination(.presented(.omniPlayer(.setExpanded(expanded)))))
    }
}

