'use strict';

import Q from 'q';
import moment from 'moment';

import AppConstants from '../constants/application_constants';

// TODO: Create Unittests that test all functions

export function status(response) {
    if (response.status >= 200 && response.status < 300) {
        return response;
    }
    throw new Error(response.json());
}

export function getCookie(name) {
    let parts = document.cookie.split(';');

    for(let i = 0; i < parts.length; i++) {
        if(parts[i].indexOf(name + '=') > -1) {
            return parts[i].split('=').pop();
        }
    }
}

export function setCookie(key, value, days) {
    const exdate = moment();
    exdate.add(days, 'days');
    value = window.escape(value) + ((days === null) ? '' : `; expires= ${exdate.utc()}`);
    document.cookie = `${key}=${value}`;
}

/*

    Given a url for an image, this method fetches it and returns a promise that resolves to
    a blob object.
    It can be used to create a 64base encoded data url.

    Taken from: http://jsfiddle.net/jan_miksovsky/yy7zs/

    CURRENTLY NOT USED...

 */
export function fetchImageAsBlob(url) {
    return Q.Promise((resolve, reject) => {
        let xhr = new XMLHttpRequest();

        xhr.open('GET', url, true);

        // Ask for the result as an ArrayBuffer.
        xhr.responseType = 'arraybuffer';

        xhr.onreadystatechange = function() {
            if(xhr.readyState === 4 && xhr.status >= 400) {
                reject(xhr.statusText);
            }
        };

        xhr.onload = function() {
            // Obtain a blob: URL for the image data.
            let arrayBufferView = new Uint8Array(this.response);
            let blob = new Blob([arrayBufferView], {type: 'image/jpeg'});
            resolve(blob);
        };

        xhr.send();
    });
}