import APIClient
import Localization
import ShareAssetClient
import SwiftUI

struct AssetCreationButton: View {
    let target: ShareAssetCreationTarget
    let action: () -> Void

    var body: some View {
        Button {
            action()
        } label: {
            HStack(spacing: 10.0) {
                Spacer()

                icon

                Text(buttonText)
                    .typographyV1(.body3)
                    .foregroundStyle(Color.SemanticV1.textInvert)

                Spacer()
            }
            .padding(12.0)
            .background {
                Color.SemanticV1.backgroundInvert
            }
            .clipShape(.rect(cornerRadius: .infinity))
        }
        .buttonStyle(.plain)
    }
}

private extension AssetCreationButton {
    @ViewBuilder
    var icon: some View {
        ZStack {
            switch target {
            case .downloadVideo:
                ZStack {
                    Color.clear
                    Image.Icon.downloadRounded
                        .resizable()
                        .aspectRatio(contentMode: .fit)
                        .frame(width: 16.0, height: 16.0)
                        .foregroundStyle(Color.SemanticV1.iconPrimary)
                }
                .background {
                    Color.SemanticV1.backgroundTertiary
                }

            case .facebookStories:
                Image.ShareIcon.facebook
                    .resizable()
                    .aspectRatio(contentMode: .fill)

            case .instagramStories:
                Image.ShareIcon.instagram
                    .resizable()
                    .aspectRatio(contentMode: .fill)

            case .tiktokVideo:
                Image.ShareIcon.tiktok
                    .resizable()
                    .aspectRatio(contentMode: .fill)
            }
        }
        .frame(width: 20, height: 20)
        .clipShape(.rect(cornerRadius: .infinity))
    }

    var buttonText: String {
        switch target {
        case .downloadVideo:
            return L10n.FeatureShareAssets.downloadVideoClip
        case .instagramStories:
            return L10n.FeatureShareAssets.shareToInstagram
        case .facebookStories:
            return L10n.FeatureShareAssets.shareToFacebook
        case .tiktokVideo:
            return L10n.FeatureShareAssets.shareToTiktok
        }
    }
}
