import APIClient
import Foundation

public struct ShareAssetConfig: Equatable, Hashable {
    enum ConfigKey {
        static let presetID = "preset_id"
        static let presetStyle = "preset_style"
        static let lyricsStyle = "lyrics_style"
        static let stickerStyle = "sticker_style"
    }

    public let backgroundPreset: ShareAssetBackgroundPreset
    public let stickerStyle: ShareAssetStickerStyle
    public let lyricsStyle: ShareAssetLyricsStyle

    public init(
        backgroundPreset: ShareAssetBackgroundPreset,
        stickerStyle: ShareAssetStickerStyle,
        lyricsStyle: ShareAssetLyricsStyle
    ) {
        self.backgroundPreset = backgroundPreset
        self.stickerStyle = stickerStyle
        self.lyricsStyle = lyricsStyle
    }

    var asDataDictionary: [String: ShareAssetSpec.AssetConfigItem] {
        return [
            ConfigKey.presetID: .init(string: backgroundPreset.presetID),
            ConfigKey.presetStyle: .init(string: backgroundPreset.presetStyle),
            ConfigKey.lyricsStyle: .init(string: lyricsStyle.id),
            ConfigKey.stickerStyle: .init(string: stickerStyle.id),
        ]
    }

    public var compositeID: String {
        return "\(backgroundPreset.presetID):\(backgroundPreset.presetStyle):\(lyricsStyle.id):\(stickerStyle.id)"
    }
}
