<?php
/*
 * Copyright © 2021 ExacTI Technology Solutions. All rights reserved.
 * GPLv3 General License.
 * https://exacti.com.br
 * Phacil PHP Framework - https://github.com/exacti/phacil-framework
 */

namespace Phacil\Framework\Interfaces;

/**
 * Action interface.
 * 
 * @since 2.0.0
 * @package Phacil\Framework\Interfaces
 */
interface Action {

	const APP = "APP";
	const SYSTEM = "SYSTEM";
	const MAX_ROUTE_LENGTH = 255;

	/**
	 * @param string $route HTTP route for the respective controller
	 * @param array $args (Optional) Args to be pass for the method controller
	 * @param string $local (Optional) Set if the action is a system or app controller
	 * @return void 
	 */
	public function __construct($route, $args = array(), $local = self::APP);

	/** 
	 * Return the controller file path
	 * 
	 * @since 1.0.0
	 * @return string  
	 */
	public function getFile();

	/** 
	 * Return the class of controller
	 * 
	 * @deprecated 2.0.0 This method return only legacy class. Use getClassAlt instead.
	 * @see \Phacil\Framework\Interfaces\Action::getClassAlt()
	 * 
	 * @since 1.0.0
	 * @return string  */
	public function getClass();

	/**
	 * Set the class of controller to be loaded
	 * 
	 * @param string $class 
	 * @return $this 
	 */
	public function setClass($class);

	/** 
	 * Get all possible classes for controller in the new 2.0 framework version
	 * 
	 * @since 2.0.0
	 * 
	 * @return array  
	 */
	public function getClassAlt();

	/** 
	 * Return the method to be loaded
	 * 
	 * @return string  
	 * @since 1.0.0
	 */
	public function getMethod();

	/** 
	 * Return the args
	 * 
	 * @return array  
	 * @since 1.0.0
	 */
	public function getArgs();
}