/*
 * Copyright (c) 2026 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

struct [[ge::params(type=SDF_EDGE_LIGHT_EFFECT, name="SDFEdgeLightEffect")]] GESDFEdgeLightEffectParams {
    [[ge::prop(name="SDFEdgeLightEffect_SpreadFactor", min=0.0f, max=4096.0f)]]
    float sdfSpreadFactor = 64.0f;
    [[ge::prop(name="SDFEdgeLightEffect_BloomIntensityCutoff", min=0.0f, max=1.0f)]]
    float bloomIntensityCutoff = 0.1f;
    [[ge::prop(name="SDFEdgeLightEffect_LightMaxIntensity", min=0.0f, max=4096.0f)]]
    float maxIntensity = 1.0f;
    [[ge::prop(name="SDFEdgeLightEffect_MaxBloomIntensity", min=0.0f, max=4096.0f)]]
    float maxBloomIntensity = 1.0f;
    [[ge::prop(name="SDFEdgeLightEffect_BloomFalloffPow", min=0.0f, max=4096.0f)]]
    float bloomFalloffPow = 2.0f;
    [[ge::prop(name="SDFEdgeLightEffect_MinBorderWidth", min=0.0f, max=4096.0f)]]
    float minBorderWidth = 2.0f;
    [[ge::prop(name="SDFEdgeLightEffect_MaxBorderWidth", min=0.0f, max=4096.0f)]]
    float maxBorderWidth = 5.0f;
    [[ge::prop(name="SDFEdgeLightEffect_InnerBorderBloomWidth", min=0.0f, max=4096.0f)]]
    float innerBorderBloomWidth = 30.0f;
    [[ge::prop(name="SDFEdgeLightEffect_OuterBorderBloomWidth", min=0.0f, max=4096.0f)]]
    float outerBorderBloomWidth = 30.0f;
    [[ge::prop(name="SDFEdgeLightEffect_Color", min={0.0f, 0.0f, 0.0f}, max={1.0f, 1.0f, 1.0f})]]
    Vector3f color = Vector3f(1.0f, 1.0f, 1.0f);
    [[ge::prop("SDFEdgeLightEffect_SDFImage")]]
    std::shared_ptr<Drawing::Image> sdfImage;
    [[ge::prop("SDFEdgeLightEffect_LightMask")]]
    std::shared_ptr<GEShaderMask> lightMask;
    [[ge::prop(name="SDFEdgeLightEffect_SDFShape", cast_from="std::shared_ptr<GEShaderShape>")]]
    std::shared_ptr<Drawing::GESDFShaderShape> sdfShape;
};