import { initDefs } from './config'
import { toNode, setAttribute } from "./tool"

const enhanceGradient = function (gradient: SVGElement, gradientId: string) {
    const enhanceGradient = {
        "value": function () {
            return "url(#" + gradientId + ")"
        },
        "setColor": function (stop: number, color: string) {

            const stopEl = toNode("stop")
            gradient.appendChild(stopEl)
            setAttribute(stopEl, "offset", (stop * 100) + "%")
            setAttribute(stopEl, "style", "stop-color:" + color + ";")

            return enhanceGradient
        }
    }
    return enhanceGradient
}

// 线性渐变
export const linearGradient = function (el: SVGElement, x0: number, y0: number, x1: number, y1: number) {

    const defs = initDefs(el)
    const gradientId = "visliteLg" + new Date().valueOf() + "" + (Math.random() * 1000000).toFixed(0)

    const linearGradient = toNode("linearGradient")
    defs.appendChild(linearGradient)
    setAttribute(linearGradient, "id", gradientId)
    setAttribute(linearGradient, "x1", x0 + "%")
    setAttribute(linearGradient, "y1", y0 + "%")
    setAttribute(linearGradient, "x2", x1 + "%")
    setAttribute(linearGradient, "y2", y1 + "%")

    return enhanceGradient(linearGradient, gradientId)
}

// 环形渐变
export const radialGradient = function (el: SVGElement, cx: number, cy: number, r: number) {

    const defs = initDefs(el)
    const gradientId = "visliteRg" + new Date().valueOf() + "" + (Math.random() * 1000000).toFixed(0)

    const radialGradient = toNode("radialGradient")
    defs.appendChild(radialGradient)
    setAttribute(radialGradient, "id", gradientId)
    setAttribute(radialGradient, "cx", cx + "%")
    setAttribute(radialGradient, "cy", cy + "%")
    setAttribute(radialGradient, "r", r + "%")

    return enhanceGradient(radialGradient, gradientId)
}
