import Foundation
import SwiftUI

struct VideoDetailsPaddingModifier: ViewModifier {
    static var defaultAdditionalDetailsPadding: Double {
        #if os(macOS)
            5
        #else
            10
        #endif
    }

    let geometry: GeometryProxy
    let aspectRatio: Double?
    let minimumHeightLeft: Double
    let additionalPadding: Double
    let fullScreen: Bool

    init(
        geometry: GeometryProxy,
        aspectRatio: Double? = nil,
        minimumHeightLeft: Double? = nil,
        additionalPadding: Double? = nil,
        fullScreen: Bool = false
    ) {
        self.geometry = geometry
        self.aspectRatio = aspectRatio ?? VideoPlayerView.defaultAspectRatio
        self.minimumHeightLeft = minimumHeightLeft ?? VideoPlayerView.defaultMinimumHeightLeft
        self.additionalPadding = additionalPadding ?? Self.defaultAdditionalDetailsPadding
        self.fullScreen = fullScreen
    }

    var usedAspectRatio: Double {
        guard aspectRatio != nil else {
            return VideoPlayerView.defaultAspectRatio
        }

        return [aspectRatio!, VideoPlayerView.defaultAspectRatio].min()!
    }

    var playerHeight: Double {
        [geometry.size.width / usedAspectRatio, geometry.size.height - minimumHeightLeft].min()!
    }

    var topPadding: Double {
        fullScreen ? 0 : (playerHeight + additionalPadding)
    }

    func body(content: Content) -> some View {
        content
            .padding(.top, topPadding)
    }
}