<?php

if (!defined('ABSPATH')) {
    exit;
}
if (!class_exists('acf_loop')) {
    class acf_loop
    {
        function __construct()
        {
            $this->loops = array();
        }
        function is_empty()
        {
            return empty($this->loops);
        }
        function is_loop($i = 0)
        {
            return isset($this->loops[$i]);
        }
        function get_i($i = 0)
        {
            if ($i === 'active') {
                $i = -1;
            }
            if ($i === 'previous') {
                $i = -2;
            }
            if ($i < 0) {
                $i = count($this->loops) + $i;
            }
            return $i;
        }
        function add_loop($loop = array())
        {
            $loop = wp_parse_args($loop, array('selector' => '', 'name' => '', 'value' => false, 'field' => false, 'i' => -1, 'post_id' => 0, 'key' => ''));
            $loop['value'] = acf_get_array($loop['value']);
            if ($loop['i'] == -1) {
                $loop['value'] = array_values($loop['value']);
            }
            $this->loops[] = $loop;
            return $loop;
        }
        function update_loop($i = 'active', $key = null, $value = null)
        {
            $i = $this->get_i($i);
            if (!$this->is_loop($i)) {
                return false;
            }
            $this->loops[$i][$key] = $value;
            return true;
        }
        function get_loop($i = 'active', $key = null)
        {
            $i = $this->get_i($i);
            if (!$this->is_loop($i)) {
                return false;
            }
            if ($key !== null) {
                return $this->loops[$i][$key];
            }
            return $this->loops[$i];
        }
        function remove_loop($i = 'active')
        {
            $i = $this->get_i($i);
            if (!$this->is_loop($i)) {
                return false;
            }
            unset($this->loops[$i]);
            $this->loops = array_values($this->loops);
            if ($this->is_empty()) {
                $this->loops = array();
            }
        }
    }
    acf()->loop = new acf_loop();
}
function acf_add_loop($loop = array())
{
    return acf()->loop->add_loop($loop);
}
function acf_update_loop($i = 'active', $key = null, $value = null)
{
    return acf()->loop->update_loop($i, $key, $value);
}
function acf_get_loop($i = 'active', $key = null)
{
    return acf()->loop->get_loop($i, $key);
}
function acf_remove_loop($i = 'active')
{
    return acf()->loop->remove_loop($i);
}