import AnalyticsClient
import ComposableArchitecture
import Utilities

extension RatingTracker {
    struct Analytics: AnalyticsReducer {
        @Dependency(AnalyticsClient.self) private var analyticsClient

        func analytics(before: State, after _: State, action: Action) -> Effect<Action> {
            var description: String {
                return "Likes: \(before.likeCount), Shares: \(before.shareCount), Add-To-Playlists: \(before.addedToPlaylist), Song-Creates: \(before.songCreateCount)"
            }

            switch action {
            case .delegate(.rateRequestTriggered):
                analyticsClient.track(.general(.inAppReviewPopupShown(description: description)))
                return .none

            case .dismiss:
                analyticsClient.track(.general(.inAppReviewPopupDismissed(description: description)))
                return .none

            case .rateSuno:
                analyticsClient.track(.general(.inAppReviewPopupRatingRequested(description: description)))
                return .none

            default:
                break
            }

            return .none
        }
    }
}
