<?php
namespace Main\Users;

require_once 'Object.php';
require_once 'Task.php';

use \Main\Object;	

class TaskManager extends Object
{
	// Attributes
	///private static $_instance = new Data(); <-- This doesn't work
	private static $_instance;

	private $_tasks = [];

	// Constructor
	
	private function __construct()
	{
	}
	
	// Methods for properties
	// Getters and Setters

	public static function GetInstance()
	{
		// Lazy singleton approach
		if(empty(self::$_instance))
		{
			self::$_instance = new TaskManager();		
		}	
		return self::$_instance; 
	}
	
	
	// Methods
	public function AddTask(Task $task)
	{
		$this->_tasks[] = $task;
	}
	
	public function RemoveTask(Task $task)
	{
		$key = array_search($task, $this->_tasks, true);
		if($key !== false)
		{
			// array_splice($this->_tasks, $key, 1);  // Remove and normalize keys
			unset($this->_tasks[$key]);    // <-- Will leave a gap in the keys e.g. indices might read 0, 1, 3, 4 if you delete at key 2
			// Normalize keys after unset using --> $this->_tasks = array_values($this->_tasks);
		}		
	}
	
	public function FindTask($owner, $name)
	{
		foreach($this->_tasks as $atask)
		{
			if($atask->Owner == $owner && $atask->Name == $name)
			{
				return $atask;
			}
		}		
		return false;	// Test using !== false
	}
	
	public function FindOwnedTasks($owner)
	{
		$tasks = [];		
		foreach($this->_tasks as $atask)
		{
			if($atask->Owner == $owner)
			{
				$tasks[] = $atask;	// Add task to results array
			}
		}
		return $tasks;
	}
}
?>