export class ShapeParameter {
    constructor(public key: string, public value: number) {
    }
}
export class ShapeParameters {
    private items: { [key: string]: ShapeParameter } = {};

    addIfNotExists(parameter: ShapeParameter): void {
        if(!(parameter.key in this.items))
            this.set(parameter);
    }
    set(parameter: ShapeParameter): void {
        this.items[parameter.key] = parameter;
    }
    addRangeIfNotExists(parameters: ShapeParameter[]): void {
        for(let i = 0; i < parameters.length; i++)
            this.addIfNotExists(parameters[i]);
    }
    get(key: string): ShapeParameter {
        return this.items[key];
    }
    forEach(callback: (parameter: ShapeParameter) => void): void {
        for(const key in this.items)
            if(Object.prototype.hasOwnProperty.call(this.items, key))
                callback(this.items[key]);
    }
    clone(): ShapeParameters {
        const result = new ShapeParameters();
        this.forEach(p => { result.addIfNotExists(new ShapeParameter(p.key, p.value)); });
        return result;
    }
    toObject(): any {
        const result = {};
        let modified = false;
        this.forEach(p => {
            result[p.key] = { "value": p.value };
            modified = true;
        });
        return modified ? result : null;
    }
    fromObject(obj: unknown): void {
        this.forEach(p => {
            const paramObj = obj[p.key];
            if(paramObj)
                if(typeof paramObj["value"] === "number")
                    p.value = paramObj["value"];

        });
    }
}
