<?php

function fill($data = [], $count = 1){
//$data = [];
    foreach ($data as $key => $value){
        if($key != 0) {
            unset($data[$key]);
            $data[$key - 1] = $value;
        }else unset($data[$key]);
    }

    for($i=0; $i<=$count-1; $i++){
        if(empty($data[$i])){
            $data[$i] = 0 ;
        }else $data[$i] *= 1 ;
    }
    ksort($data);

    return $data;
}

function fillCount($count = 1){
    $array = [];
    for($i=0; $i<=$count-1; $i++){
        $array[$i] = $i+1;
    }
    return $array;
}

function countDayInMonth($dataProvider){
    return cal_days_in_month(
        CAL_GREGORIAN,
        isset(explode('.', $dataProvider->month)[1]) ? explode('.', $dataProvider->month)[1] : 1,
        isset(explode('.', $dataProvider->month)[0]) ? explode('.', $dataProvider->month)[0] : 1
    );
}

/* @return \app\models\user*/
function user()
{
    return Yii::$app->user;
}

/* @return \app\models\User*/
function identity($autorenew = false)
{
    return Yii::$app->user->getIdentity($autorenew);
}

function getValue($data, $name, $default = null)
{
    return \yii\helpers\ArrayHelper::getValue($data, $name, $default);
}

/**
 * Возвращает сумму прописью
 * @author mxuser
 * @uses morph(...)
 * @param float|int $num
 * @return string
 */
function num2str($num)
{
    $nul = 'ноль';
    $ten = array(
        array('', 'одна', 'дві', 'три', 'чотири', 'п\'ять', 'шість', 'сім', 'вісім', 'дев\'ять'),
        array('', 'одна', 'дві', 'три', 'чотири', 'п\'ять', 'шість', 'сім', 'вісім', 'дев\'ять'),
    );
    $a20 = array('десять', 'одинадцять', 'дванадцать', 'тринадцять', 'чотирнадцять', 'п\'ятнадцять', 'шістнадцять', 'сімнадцять', 'вісімнадцять', 'дев\'ятнадцять');
    $tens = array(2 => 'двадцять', 'тридцять', 'сорок', 'п\'ятьдесят', 'шістьдесят', 'сімдесят', 'вісімдесят', 'дев\'яносто');
    $hundred = array('', 'сто', 'двісті', 'триста', 'чотириста', 'п\'ятьсот', 'шістьсот', 'сімсот', 'вісімсот', 'дев\'ятьсот');
    $unit = array( // Units
        array('цент', 'цента', 'центів', 1),
        array('долар', 'долари', 'доларів', 0),
        array('тисяча', 'тисячі', 'тисяч', 1),
        array('мільйон', 'мільйони', 'мільйонів', 0),
        array('мільярд', 'мільярди', 'мільярдів', 0),
    );
    //
    list($rub, $kop) = explode('.', sprintf("%015.2f", floatval($num)));
    $out = array();
    if (intval($rub) > 0) {
        foreach (str_split($rub, 3) as $uk => $v) { // by 3 symbols
            if (!intval($v)) continue;
            $uk = sizeof($unit) - $uk - 1; // unit key
            $gender = $unit[$uk][3];
            list($i1, $i2, $i3) = array_map('intval', str_split($v, 1));
            // mega-logic
            $out[] = $hundred[$i1]; # 1xx-9xx
            if ($i2 > 1) $out[] = $tens[$i2] . ' ' . $ten[$gender][$i3]; # 20-99
            else $out[] = $i2 > 0 ? $a20[$i3] : $ten[$gender][$i3]; # 10-19 | 1-9
            // units without rub & kop
            if ($uk > 1) $out[] = morph($v, $unit[$uk][0], $unit[$uk][1], $unit[$uk][2]);
        } //foreach
    } else $out[] = $nul;
    $out[] = morph(intval($rub), $unit[1][0], $unit[1][1], $unit[1][2]); // rub
    $out[] = $kop . ' ' . morph($kop, $unit[0][0], $unit[0][1], $unit[0][2]); // kop
    return trim(preg_replace('/ {2,}/', ' ', join(' ', $out)));
}

function morph($n, $f1, $f2, $f5)
{
    $n = abs(intval($n)) % 100;
    if ($n > 10 && $n < 20) return $f5;
    $n = $n % 10;
    if ($n > 1 && $n < 5) return $f2;
    if ($n == 1) return $f1;
    return $f5;
}

function app()
{
    return \Yii::$app;
}

/* @return \app\components\Templater */
function templater()
{
    return app()->templater;
}

function DMF($val = ''){
    var_dump($val);
    die();
}