import AnalyticsClient
import ComposableArchitecture
import StatsigClient

extension EditClipCoordinator {
    struct Analytics: AnalyticsReducer {
        var source: String = "edit_clip"

        func analytics(before: State, after _: State, action: Action) -> Effect<Action> {
            switch action {
            case .extendTapped:
                track(
                    Event(
                        category: .create,
                        actionName: .extendTapped,
                        actionType: .tap,
                        elementType: .clip,
                        elementId: before.clip.id.remoteId
                    )
                )

            default:
                break
            }
            return .none
        }
    }
}

extension ClipEditsListItem {
    struct Analytics: AnalyticsReducer {
        var source: String = "clip_edits_list_item"

        func analytics(before _: State, after _: State, action: Action) -> Effect<Action> {
            switch action {
            case .moreTapped:
                track(
                    Event(
                        category: .songActions,
                        actionName: .songActionsMenuOptionsTapped
                    )
                )

            default:
                return .none
            }
            return .none
        }
    }
}

extension ClipEdits {
    struct Analytics: AnalyticsReducer {
        var source: String = "clip_edits"

        func analytics(before _: State, after _: State, action: Action) -> Effect<Action> {
            switch action {
            case .didSelectEdit(let clip):
                track(
                    Event(
                        category: .create,
                        actionName: .applyExtensionTapped,
                        actionType: .tap,
                        elementType: .clip,
                        elementId: clip.id.remoteId
                    )
                )

            default:
                break
            }
            return .none
        }
    }
}

extension CoverClip {
    struct Analytics: AnalyticsReducer {
        var source: String = "cover_clip"

        func analytics(before: State, after _: State, action: Action) -> Effect<Action> {
            switch action {
            case .generateTapped:
                track(
                    Event(
                        category: .create,
                        actionName: .coverTapped,
                        actionType: .tap,
                        elementType: .clip,
                        elementId: before.clip.id.remoteId
                    )
                )

            default:
                break
            }
            return .none
        }
    }
}
