import Foundation
import SwiftUI

public struct LogoView: View {
    var type: String
    var useShadow: Bool
    var useBorder: Bool
    var useBackground : Bool
    var backgroundColor: Color
    var shadowColor : Color
    var borderColor : Color
    var source: String
    var radius: CGFloat

    public init(source: String = "",
                type: String = "image",
                useBackground : Bool = true,
                useShadow: Bool = true,
                useBorder : Bool = true,
                backgroundColor: Color = Colors.black01,
                shadowColor : Color = Color(hex: "d9d9d9"),
                borderColor : Color = Color(hex: "e2e2e2")){
        self.type = type
        self.useShadow = useShadow
        self.useBorder = useBorder
        self.useBackground = useBackground
        self.backgroundColor = backgroundColor
        self.borderColor = borderColor
        self.source = source
        self.shadowColor = shadowColor
        self.radius = type == "image" ? 7 : 0
    }


    public var body: some View {
        return ImageView(source)
            .scaledToFit()
            .frame(width: 28, height: 28)
            .cornerRadius(radius)
            .containerBorder(type, useBorder, borderColor)
            .containerBackground(type, useBackground, backgroundColor)
            .containerShadow(useShadow, shadowColor)
    }

}

private extension View {
    func containerBorder (_ type: String, _ useBorder: Bool, _ borderColor: Color) -> some View {
        Group {
            if (useBorder && type != "icon") {
                self.overlay(RoundedRectangle(cornerRadius: 8).stroke(borderColor, lineWidth: 1))
            } else {
                self
            }
        }
    }
    func containerBackground (_ type: String, _ useBackground: Bool, _ backgroundColor: Color) -> some View {
        Group {
            if (useBackground && type != "icon") {
                self.background(backgroundColor)
            } else {
                self
            }
        }
    }
    func containerShadow (_ useShadow: Bool, _ shadowColor: Color) -> some View {
        Group {
            if useShadow {
                self.shadow(color: shadowColor, radius: 2, x: 0, y: 2)
            } else {
                self
            }
        }
    }
}
