<?php

use Yaf\Application;
use Yaf\Dispatcher;

if (!function_exists('config')) {

    /**
     * 假设当前环境为 dev（在php.ini中配置）
     * 当前 appid 为 ProgramA （在conf/application.ini中配置）
     * 则 config("test", "a"); 将取到 yaconf/test.ini 中， [dev-ProgramA] 下定义的配置 a 的值
     *
     * @param $file
     * @param string $param
     * @return string
     */
    function config($file, $param = ''){
        if (empty($file) || !file_exists(ROOT_PATH."/yaconf/".$file.".ini")){
            //return "";
        }

        $env    = Application::app()->environ() ?? "test";
        
        $appid  = Application::app()->getConfig()->get("appid");

        $key = $file.'.'. (empty($appid) ? $env : $env.'-'.$appid);
        $key = $param ==='' ? $key : $key.".".$param;

        return \Yaconf::get($key);
    }


    if (!function_exists('appConfig')) {

        /**
         * 获取框架的 conf/application 中的配置
         * @param $param
         * @return mixed
         */
        function appConfig($param){
            return Application::app()->getConfig()->get($param);
        }
    }


    if (!function_exists('getHeader')) {

        function getHeader($name = null){
            if($name){
                return Dispatcher::getInstance()->getRequest()->getServer(strtoupper('HTTP_'.$name));
            }
            return Dispatcher::getInstance()->getRequest()->getServer();
        }
    }


    if (!function_exists('page')) {
        function page($param){
            $page_start = 0;
            $page_size  = 20;

            if(isset($param['page_size']) && $param['page_size']>0){
                $page_size = intval($param['page_size']);
            }

            if (isset($param['page']) && $param['page']>0){
                $page_start = (intval($param['page']) - 1) * $page_size;
            }

            return [
                'start' => $page_start,
                'size'  => $page_size
            ];
        }
    }



    if (!function_exists('filterArrByField')) {

        /**
         * 过滤数组，只留 $field 中的字段
         * @param $array array
         * @param $field array
         * @return array
         */
        function filterArrayByField(array $array, array $field, $recursive = true){
            if(empty($field) || empty($array)){
                return $array;
            }

            foreach ( $array as $key => $val ) {
                if( $recursive && is_array($val)){
                    $array[$key] = filterArrayByField($val, $field);
                } elseif(!in_array($key."", $field)){
                    unset($array[$key]);
                }
            }
            return $array;
        }
    }


    if (!function_exists('arrayGroupBy')) {
      
        /**
         * 二维数组转三维数组(指定键为三维数组的键名)
         *
         * @param  [type] $arr [要排序的数组]
         * @param  [type] $key [指定的键]
         * @return [type] $grouped   [重排的数组]
         */
        function arrayGroupBy($arr, $key)
        {
            $grouped = [];
            foreach ($arr as $value) {
                $grouped[$value[$key]][] = $value;
            }
                
            if (func_num_args() > 2) {
                $args = func_get_args();
                foreach ($grouped as $key => $value) {
                    $parms = array_merge([$value], array_slice($args, 2, func_num_args()));
                    $grouped[$key] = call_user_func_array('array_group_by', $parms);
                }
            }
            return $grouped;
        }  
    }
}