<?php

/** 
 * Convert Hexadecimal Color code to HSL 
 * all usefull functions here:
 * 
 * - hexToHsl( $hex )
 * - hslToHex( $hsl )
 * - hue2rgb( $hue )
 * - rgb2hex( $rgb )
 * */

function hexToHsl( $hex ) {
    $hex = ltrim($hex, '#'); // remove # sign to avoid php7 warning
    $red = hexdec(substr($hex, 0, 2)) / 255;
    $green = hexdec(substr($hex, 2, 2)) / 255;
    $blue = hexdec(substr($hex, 4, 2)) / 255;

    $cmin = min($red, $green, $blue);
    $cmax = max($red, $green, $blue);
    $delta = $cmax - $cmin;

    if ($delta === 0) {
        $hue = 0;
    } elseif ($cmax === $red) {
        // $hue = (($green - $blue) / $delta) % 6;
        $hue = (($green - $blue) / $delta);
    } elseif ($cmax === $green) {
        $hue = ($blue - $red) / $delta + 2;
    } else {
        $hue = ($red - $green) / $delta + 4;
    }

    $hue = round($hue * 60);
    if ($hue < 0) {
        $hue += 360;
    }

    $lightness = (($cmax + $cmin) / 2);
    $saturation = $delta === 0 ? 0 : ($delta / (1 - abs(2 * $lightness - 1)));
    if ($saturation < 0) {
        $saturation += 1;
    }

    $lightness = round($lightness * 100);
    $saturation = round($saturation * 100);

    return array($hue, $saturation, $lightness);
}