//
//  MaskingEchoBox.swift
//  Adamantium
//
//  Created by Sunny Uppal on 11/25/24.
//

public class MaskingEchoBox: ConfiguredQuadRenderable<MaskingEchoBox.Config> {
    
    public struct Config: QuadRenderConfiguration {
        
        internal let box_width: ADFloat;
        internal let box_height: ADFloat;
        
        internal let box_rotation: ADFloat;
        internal let box_roundness: ADFloat;
        
        internal let repeat_count: ADFloat;
        internal let repeat_x_spacing: ADFloat;
        internal let repeat_y_spacing: ADFloat;
        internal let repeat_x_offset: ADFloat;
        internal let repeat_y_offset: ADFloat;
        
        internal let fade_mask_mix: ADFloat;
        internal let fade_mask_rotation: ADFloat;
        internal let fade_mask_offset: ADFloat;
        internal let fade_mask_scaling: ADFloat;
        internal let invert_mix: ADFloat;
        
        public init(
            boxWidth: ADFloat = 1.0,
            boxHeight: ADFloat = 1.0,
            boxRotation: ADFloat = 0.125,
            boxRoundness: ADFloat = 0.05,
        
            repeatCount: ADFloat = 5.0,
            repeatXSpacing: ADFloat = 0.3,
            repeatYSpacing: ADFloat = 0.0,
            repeatXOffset: ADFloat = 1.7,
            repeatYOffset: ADFloat = 0.0,
        
            fadeMaskMix: ADFloat = 1.0,
            fadeMaskRotation: ADFloat = -0.125,
            fadeMaskOffset: ADFloat = 1.0,
            fadeMaskScaling: ADFloat = 2.0,
            invertMix: ADFloat = 0.0) {
                
            box_width           = boxWidth
            box_height          = boxHeight
            
            box_rotation        = boxRotation
            box_roundness       = boxRoundness
            
            repeat_count        = repeatCount
            repeat_x_spacing    = repeatXSpacing
            repeat_y_spacing 	= repeatYSpacing
            repeat_x_offset     = repeatXOffset
            repeat_y_offset     = repeatYOffset
            
            fade_mask_mix       = fadeMaskMix
            fade_mask_rotation  = fadeMaskRotation
            fade_mask_offset    = fadeMaskOffset
            fade_mask_scaling   = fadeMaskScaling
            invert_mix          = invertMix
        }
        
        public static var defaultConfiguration: Config {
            return Config()
        }
    }
    
    override public var configureAction: ConfigureAction {
        return { encoder in
            super.configureAction(encoder)
        }
    }
    
    override var fragmentShaderName: String {
        return "masking_echo_box_frag"
    }
}
