import ComponentLibrary
import Localization
import ShareAssetClient
import SwiftUI

extension ShareableTarget: ShareButtonConfigurable {
    @ViewBuilder
    var icon: some View {
        switch self {
        case let .platform(platform):
            let image: Image = switch platform {
            case .facebook:
                Image.ShareIcon.facebook
            case .instagram:
                Image.ShareIcon.instagram
            case .messages:
                Image.ShareIcon.messages
            case .tiktok:
                Image.ShareIcon.tiktok
            case .x:
                Image.ShareIcon.x
            case .whatsApp:
                Image.ShareIcon.whatsApp
            }

            image
                .resizable()

        case let .system(activity):
            let image: Image = switch activity {
            case .copyLink: Image.Icon.linkShare
            case .download: Image.Icon.downloadRounded
            case .more: Image.Icon.moreVertical
            }

            image
                .frame(maxWidth: .infinity, maxHeight: .infinity)
                .background(Color.SemanticV1.backgroundQuaternary)
        }
    }

    var title: String {
        switch self {
        case .system(.copyLink): L10n.FeatureShareAssets.actionCopyLink
        case .system(.download): L10n.FeatureShareAssets.actionDownload
        case .system(.more): L10n.FeatureShareAssets.actionMore
        case .platform(.facebook): L10n.FeatureShareAssets.actionFacebook
        case .platform(.instagram): L10n.FeatureShareAssets.actionInstagram
        case .platform(.messages): L10n.FeatureShareAssets.actionMessages
        case .platform(.tiktok): L10n.FeatureShareAssets.actionTiktok
        case .platform(.whatsApp): L10n.FeatureShareAssets.actionWhatsapp
        case .platform(.x): L10n.FeatureShareAssets.actionX
        }
    }

    public var id: String {
        rawValue
    }

    var requiresVideoRendering: Bool {
        switch self {
        case .system(.copyLink),
             .platform(.messages),
             .platform(.x),
             .platform(.whatsApp),
             .system(.more):
            false

        case .system(.download),
             .platform(.instagram),
             .platform(.tiktok),
             .platform(.facebook):
            true
        }
    }

    var compositeID: String {
        switch self {
        case .system(let system):
            return "system-\(self.rawValue)"
        case .platform(let platform):
            return "platform-\(self.rawValue)"
        }
    }
}
