<?php defined('BASEPATH') or exit('No direct script access allowed');

/* ----------------------------------------------------------------------------
 * Easy!Appointments - Open Source Web Scheduler
 *
 * @package     EasyAppointments
 * @author      A.Tselegidis <alextselegidis@gmail.com>
 * @copyright   Copyright (c) 2013 - 2020, Alex Tselegidis
 * @license     http://opensource.org/licenses/GPL-3.0 - GPLv3
 * @link        http://easyappointments.org
 * @since       v1.4.0
 * ---------------------------------------------------------------------------- */

if ( ! function_exists('is_assoc'))
{
    /**
     * Check if an array is an associative array.
     *
     * @param array $array
     *
     * @return bool
     */
    function is_assoc(array $array): bool
    {
        if (empty($array))
        {
            return FALSE;
        }

        return array_keys($array) !== range(0, count($array) - 1);
    }
}

if ( ! function_exists('array_find'))
{
    /**
     * Find the first array element based on the provided function.
     *
     * @param array $array
     * @param callable $callback
     *
     * @return mixed
     */
    function array_find(array $array, callable $callback): mixed
    {
        if (empty($array))
        {
            return NULL;
        }

        if ( ! is_callable($callback))
        {
            throw new InvalidArgumentException('No filter function provided.');
        }

        return array_filter($array, $callback)[0] ?? NULL;

    }
}

if ( ! function_exists('array_fields'))
{
    /**
     * Keep only the provided fields of an array.
     *
     * @param array $array
     * @param array $fields
     *
     * @return array
     */
    function array_fields(array $array, array $fields): array
    {
        return array_filter($array, function ($field) use ($fields) {
            return in_array($field, $fields);
        }, ARRAY_FILTER_USE_KEY);
    }
}

