import Foundation
import Metal

public class RotationScaleRenderable: ConfiguredQuadRenderable<RotationScaleRenderable.Config> {
    
    public var map: MTLTexture?
    
    public struct Config: QuadRenderConfiguration {
        
        internal let display_size: ADVector2
        internal let rotation: Float
        internal let scale: Float
        internal let mapped_color: ADVector3
        
        public init(
            displaySize: ADVector2 = .ones,
            rotation: Float = 0.0,
            scale: Float = 1.0,
            mappedColor: ADVector3 = .ones) {
            
            self.display_size = displaySize
            self.rotation = rotation
            self.scale = scale
            self.mapped_color = mappedColor
        }
        
        public static var defaultConfiguration: Config {
            return Config()
        }
    }
    
    override public var configureAction: ConfigureAction {
        guard let mapTexture = map else { return super.configureAction }
        
        return { encoder in
            super.configureAction(encoder)
            encoder?.setFragmentTexture(mapTexture, index: 0)
        }
    }
    
    override var fragmentShaderName: String {
        return "rotation_scale_only"
    }
}
