import { Directive, DirectiveBinding, ObjectDirective } from 'vue';

// 模拟 PromptChrome
class PromptChrome {
    // 这里可以添加具体的渲染逻辑
    render() {
        // ...
    }
}

// 定义附加属性的存储对象
const promptCountMap = new WeakMap<HTMLElement, number>();
const isPromptEnabledMap = new WeakMap<HTMLElement, boolean>();

// 获取和设置 PromptCount
function getPromptCount(el: HTMLElement): number {
    return promptCountMap.get(el) || 0;
}

function setPromptCount(el: HTMLElement, value: number): void {
    value = Math.max(0, value);
    promptCountMap.set(el, value);
    // 这里可以添加 PromptCountChangedCallBack 的逻辑
}

// 获取和设置 IsPromptEnabled
function getIsPromptEnabled(el: HTMLElement): boolean {
    return isPromptEnabledMap.get(el) || false;
}

function setIsPromptEnabled(el: HTMLElement, value: boolean): void {
    isPromptEnabledMap.set(el, value);
    isPromptEnabledChangedCallBack(el, value);
}

// IsPromptEnabled 属性值改变回调方法
function isPromptEnabledChangedCallBack(el: HTMLElement, isEnabled: boolean) {
    const chrome = new PromptChrome();
    if (isEnabled) {
        // 模拟添加装饰件
        chrome.render();
    } else {
        // 模拟移除装饰件
        // ...
    }
}

// 自定义指令
const PromptAdornerDirective: ObjectDirective = {
    mounted(el: HTMLElement, binding: DirectiveBinding) {
        const { promptCount, isPromptEnabled } = binding.value;
        setPromptCount(el, promptCount);
        setIsPromptEnabled(el, isPromptEnabled);
    },
    updated(el: HTMLElement, binding: DirectiveBinding) {
        const { promptCount, isPromptEnabled } = binding.value;
        setPromptCount(el, promptCount);
        setIsPromptEnabled(el, isPromptEnabled);
    }
};

export default PromptAdornerDirective;