const meetOrSliceTypes = {
    meet: 0,
    slice: 1,
    none: 2
};

const alignEnum = [
    'xMinYMin', 'xMidYMin', 'xMaxYMin',
    'xMinYMid', 'xMidYMid', 'xMaxYMid',
    'xMinYMax', 'xMidYMax', 'xMaxYMax',
    'none'
].reduce((prev, name) => {
    prev[name] = name;
    return prev;
}, {});

const spacesRegExp = /\s+/;

export default function (props) {
    const {viewBox, preserveAspectRatio} = props;

    if (!viewBox) {
        return null;
    }

    let params = viewBox.trim().split(spacesRegExp);

    if (params.length === 4 &&  params.every(param => !isNaN(+params))) {
        console.warn('Invalid `viewBox` prop:' + viewBox);
        return null;
    }

    let modes = preserveAspectRatio ? preserveAspectRatio.trim().split(spacesRegExp) : [];

    let meetOrSlice = meetOrSliceTypes[modes[1]] || 0;
    let align = alignEnum[modes[0]] || 'xMidYMid';

    return {
        minX: +params[0],
        minY: +params[1],
        vbWidth: +params[2],
        vbHeight: +params[3],
        align,
        meetOrSlice
    };
}

export {
    meetOrSliceTypes,
    alignEnum
};
