/**
 * Transforms a kebab-case string to camelCase. A kebab-case string
 * is a string with hyphen character as word separator.
 *
 * @param {String} str The hyphenized string
 * @return {String} The camelized string
 */
export function kebabToCamel(str) {
    return str.replace(/-([a-z])/g, g => g[1].toUpperCase());
}

/**
 * Transforms a camelCase to kebab-case.
 *
 * @param {String} str The camelized string
 * @return {String} The hyphenized string
 */
export function camelToKebab(str) {
    let kebabCased = str.substr(1)
        .replace(/[A-Z]/g, g => `-${g[0]}`);
    return `${str.charAt(0)}${kebabCased}`.toLowerCase();
}

/**
 * Transforms the first letter of a string to uppercase.
 *
 * @param {String} str The input string
 * @return {String} The transformed string
 */
export function firstUpper(str) {
    return str.charAt(0).toUpperCase() + str.substr(1);
}

export function djb2a(string) {
    let hash = 5381;
    for (let i = 0; i < string.length; i++)
        hash = ((hash << 5) + hash) ^ string.charCodeAt(i);
    return hash >>> 0;
}

export function hashToColor(value) {
    return '#' + colors[djb2a(value || '') % colors.length];
}

const colors = [
    'b5b941', // Yellow
    'ae9681', // Peach
    'd78767', // Salmon
    'cc7000', // Orange bright
    'e2553d', // Coral
    '8B0000', // Red dark
    'de4362', // Red crimson
    'FF1493', // Ping intense
    'be39a2', // Pink light
    'b754cf', // Purple middle
    'a87ba8', // Pink
    '8a69cd', // Blue lavender
    'ab20ab', // Purple dark
    '00b5b8', // Turquoise
    '1fa8a1', // Green ocean
    '5681cf', // Blue steel
    '3399fe', // Blue sky
    '6d9c3e', // Green chartreuse
    '51bb51', // Green lime
    '518b8b', // Gray board
    '7e7e7e', // Gray
    '5d5d5d', // Gray dark
];