<?php

namespace App\Utils;
use DateTime;

/**
 */
class DateUtils {

    /**
     * Cherche le prochain jour ouvré après la date (on évite les samedi/dimanche)
     * Ajouter les jours fériés?
     * @param DateTime $date Date actuelle
     * @return \DateTime Date avec le jour ouvré suivant
     */
    public static function getNextOpenDay($date) {
        $dateNext = clone $date; // on clone sinon la date est impactée...
        switch ( $dateNext->format('N') ) {
            case 5: // Ve
                $dateNext->add(new \DateInterval("P3D"));
                break;
            case 6: // Sa
                $dateNext->add(new \DateInterval("P2D"));
                break;
            default: // Lu-Je + Di
                $dateNext->add(new \DateInterval("P1D"));
                break;
        }
        return $dateNext;
    }
    
    /** Recupere la date Oracle et la transforme en HHMMSS */
    public static function parseDateFieldToString($dateField) {
        if ($dateField == null || strlen($dateField) == 0) return $dateField;
        $d = \DateTime::createFromFormat("Y-m-d H:i:s", $dateField);
        return $d->format("Y-m-d");
    }
    
    /** Recupere la date Oracle et la transforme en HHMMSS */
    public static function parseDateTimeField($dateField) {
        if ($dateField == null || strlen($dateField) == 0) return $dateField;
        $d = \DateTime::createFromFormat("Y-m-d H:i:s", $dateField);
        return $d->format("Y-m-d H:i:s");
    }    


    /** Recup la date en secondes */
    public static function now() {
        return round((new \DateTime())->getTimestamp()/1000);
    }
    
    public static function sec2date($sec) {
        $ts = new \DateTime();
        $ts->setTimestamp($sec);
        return $ts;
    }

    public static function millisec2date($msec) {
        $ts = new \DateTime();
        $ts->setTimestamp($msec/1000);
        return $ts;
    }    
    
    public static function ts2date($timestamp = null) {
        $tz = new \DateTimeZone("Europe/Paris");
        if ($timestamp == null) {
            $ts = new \DateTime();
        } else if (is_numeric($timestamp)) {
            $ts = new \DateTime("@$timestamp");
        } else {
            $ts = new \DateTime("$timestamp");
        }
        return $ts->setTimezone($tz);
    }

    public static function ts2hhmm($timestamp = null) {
        return self::ts2date($timestamp)->format("H:i");
    }
}
