var ShapePathInterface = (

    function() {

        return function pathInterfaceFactory(shape,view,propertyGroup){
            var prop = view.sh;

            function interfaceFunction(val){
                if(val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2){
                    return interfaceFunction.path;
                }
            }

            var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);
            prop.setGroupProperty(PropertyInterface('Path', _propertyGroup));
            Object.defineProperties(interfaceFunction, {
                'path': {
                    get: function(){
                        if(prop.k){
                            prop.getValue();
                        }
                        return prop;
                    }
                },
                'shape': {
                    get: function(){
                        if(prop.k){
                            prop.getValue();
                        }
                        return prop;
                    }
                },
                '_name': { value: shape.nm },
                'ix': { value: shape.ix },
                'propertyIndex': { value: shape.ix },
                'mn': { value: shape.mn },
                'propertyGroup': {value: propertyGroup},
            });
            return interfaceFunction;
        }
    }()
)
