import Foundation

final class AudioPlayerSettings: ObservableObject {

    @Published
    var playlistCoverImageSize: Int

    @Published
    var smallCoverImageSize: Int

    @Published
    var audioPlayerJsFile: FileResource?

    @Published
    var audioPlayerCssFile: FileResource?

    init(playlistCoverImageSize: Int,
         smallCoverImageSize: Int,
         audioPlayerJsFile: FileResource?,
         audioPlayerCssFile: FileResource?) {
        self.playlistCoverImageSize = playlistCoverImageSize
        self.smallCoverImageSize = smallCoverImageSize
        self.audioPlayerJsFile = audioPlayerJsFile
        self.audioPlayerCssFile = audioPlayerCssFile
    }

    init(file: AudioPlayerSettingsFile, files: [String : FileResource]) {
        self.playlistCoverImageSize = file.playlistCoverImageSize
        self.smallCoverImageSize = file.smallCoverImageSize
        self.audioPlayerJsFile = file.audioPlayerJsFile.map { files[$0] }
        self.audioPlayerCssFile = file.audioPlayerCssFile.map { files[$0] }
    }

    var file: AudioPlayerSettingsFile {
        .init(playlistCoverImageSize: playlistCoverImageSize,
              smallCoverImageSize: smallCoverImageSize,
              audioPlayerJsFile: audioPlayerJsFile?.id,
              audioPlayerCssFile: audioPlayerCssFile?.id)
    }
}

extension AudioPlayerSettings {

    static let `default`: AudioPlayerSettings = .init(
        playlistCoverImageSize: 280,
        smallCoverImageSize: 78,
        audioPlayerJsFile: nil,
        audioPlayerCssFile: nil)
}
