<?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\Traits;

use Phacil\Framework\Config;

/**
 * Trait for the Action class
 * 
 * Code reused in ActionSystem class
 * 
 * @see \Phacil\Framework\Interfaces\Action
 */
trait Action {

	/**
	 * Storage the file to be loaded
	 * 
	 * @var string
	 */
	protected $file;

	/**
	 * 
	 * @var string
	 */
	private $route;
	
	/**
	 * Storage the class to be loaded
	 * 
	 * @var string
	 */
	protected $class;
	
	/**
	 * Storage the method to be called
	 * 
	 * @var string
	 */
	protected $method;
	
	/**
	 * Storage the method args
	 * 
	 * @var array
	 */
	protected $args = array();

	/**
	 * Storage the all possible controller classes
	 * 
	 * @since 2.0.0
	 * @var (string[]|string|array|null)[]
	 */
	private $classAlt = [];

	/** @inheritdoc */
	public function getFile() {
		return $this->file;
	}
	
	/** 
	 * @deprecated 2.0.0 This method return only legacy class. Use getClassAlt instead.
	 * @inheritdoc */
	public function getClass() {
		return $this->class;
	}

	private function mountClass($namespace, $class, $withPrefix = true) {
		return ($withPrefix && Config::NAMESPACE_PREFIX() ? Config::NAMESPACE_PREFIX()."\\" : "").str_replace("/", "\\", (string) $namespace)."Controller\\".(string) $class;
	}

	/**
	 * @inheritdoc
	 */
	public function setClass($class) {
		$this->class = $class;
		return $this;
	}

	/** @inheritdoc  */
	public function getClassAlt() {
		return $this->classAlt;
	}
	
	/** @inheritdoc  */
	public function getMethod() {
		return $this->method;
	}
	
	/** @inheritdoc  */
	public function getArgs() {
		return $this->args;
	}

	public function getRoute() {
		return $this->route;
	}
}