import APIClient
import ComponentLibrary
import ComposableArchitecture
import Localization
import SwiftUI

public struct ExpandedPlayerGenerateMoreInfo: View {
    let generationState: ExpandedPlayerReducer.GenerationState
    let generateMoreTapped: () -> Void
    let editPromptTapped: () -> Void

    public init(
        generationState: ExpandedPlayerReducer.GenerationState,
        generateMoreTapped: @escaping () -> Void,
        editPromptTapped: @escaping () -> Void
    ) {
        self.generationState = generationState
        self.generateMoreTapped = generateMoreTapped
        self.editPromptTapped = editPromptTapped
    }

    public var body: some View {
        HStack(spacing: 10) {
            HStack(spacing: 6) {
                switch generationState {
                case .idle, .ready:
                    Image.Icon.create
                        .resizable()
                        .frame(width: 20, height: 20)
                        .foregroundStyle(Color.SemanticV2.omniplayerWhite)

                    Text(L10n.FeatureOmniPlayer.generateAgain)
                        .typographyV1(.body1)
                        .foregroundStyle(Color.SemanticV2.omniplayerWhite)

                case .generating:
                    GradientSpinner(size: .large,
                                    startColor: Color.SemanticV2.backgroundLightOverlay,
                                    endColor: Color.SemanticV2.omniplayerWhite)

                    Text(L10n.FeatureOmniPlayer.creating)
                        .typographyV1(.body1)
                        .foregroundStyle(Color.SemanticV2.omniplayerWhite)
                }
            }
            .animation(.easeInOut(duration: 0.2), value: generationState)
            .padding(.vertical, 12)
            .padding(.horizontal, 16)
            .frame(maxWidth: .infinity, minHeight: 44)
            .background {
                Capsule()
                    .fill(Material.ultraThinMaterial)
                    .strokeBorder(Color.SemanticV2.backgroundGlassDense, lineWidth: 0.25)
            }
            .contentShape(Rectangle())
            .onTapGesture {
                generateMoreTapped()
            }
            .disabled(generationState == .generating)

            HStack(spacing: 6) {
                Image.Icon.edit
                    .resizable()
                    .frame(width: 20, height: 20)
                    .foregroundStyle(Color.SemanticV2.omniplayerWhite)

                Text(L10n.FeatureOmniPlayer.editPrompt)
                    .typographyV1(.body1)
                    .foregroundStyle(Color.SemanticV2.omniplayerWhite)
            }
            .padding(.trailing, 14) // Visually center the icon and text
            .padding(.vertical, 12)
            .padding(.horizontal, 16)
            .frame(maxWidth: .infinity, minHeight: 44)
            .background {
                Capsule()
                    .fill(Material.ultraThinMaterial)
                    .strokeBorder(Color.SemanticV2.backgroundGlassDense, lineWidth: 0.25)
            }
            .contentShape(Rectangle())
            .onTapGesture {
                editPromptTapped()
            }
            .disabled(generationState == .generating)
        }
        .frame(maxWidth: .infinity)
        .opacity(generationState == .generating ? 0.8 : 1)
    }
}
