import { IResultOfValidate } from "../..";
import { IMainStateFactory } from "../Types";

export class Cach {
    constructor(
        public value: any,
        public hasChange: any,
        public validation: any
    ) {

    }

    public static isCached(obj: { mainStateFactory: IMainStateFactory, factoryFieldName: string }) {
        return obj.mainStateFactory.any.cach &&
            obj.mainStateFactory.any.cach[obj.factoryFieldName] &&
            obj.mainStateFactory.any.cach[obj.factoryFieldName] instanceof Cach;
    }
    public static getCached(obj: { mainStateFactory: IMainStateFactory, factoryFieldName: string }) {
        return obj.mainStateFactory.any.cach[obj.factoryFieldName] as Cach;
    }
    public static clear(obj: { mainStateFactory: IMainStateFactory, factoryFieldName: string }) {
        delete obj.mainStateFactory.any.cach[obj.factoryFieldName];
    }
    public static setValue(obj: { mainStateFactory: IMainStateFactory, factoryFieldName: string, hasChange: boolean, validation: IResultOfValidate }, value: any) {
        const result = new Cach(value, obj.hasChange, obj.validation);
        obj.mainStateFactory.any.cach[obj.factoryFieldName] = result;
    }
}