<?php
namespace JExtstore\Component\JChat\Site\Controller;
/**
 * @package JCHAT::ATTACHMENTS::components::com_jchat 
 * @subpackage controllers
 * @author Joomla! Extensions Store
 * @Copyright (C) 2015 - Joomla! Extensions Store
 * @license GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html   
 */
defined('_JEXEC') or die('Restricted access');
use JExtstore\Component\JChat\Administrator\Framework\Controller as JChatController;

/**
 * Attachment files controller
 * Manage all actions, from show to upload/download 
 *
 * @package JCHAT::ATTACHMENTS::components::com_jchat
 * @subpackage controllers
 * @since 1.0
 */
class AttachmentsController extends JChatController {
	/**
	 * Set model state always getting fresh vars from POST request
	 * 
	 * @access protected
	 * @param string $scope
	 * @param boolean $ordering
	 * @return object
	 */
	protected function setModelState($scope = 'default', $ordering = true): object {
		// Get default model
		$defaultModel = $this->getModel();
		
		// Set model state for basic stream
		$defaultModel->setState('from', $this->app->input->getString('from', session_id()));
		$defaultModel->setState('to', $this->app->input->getString('to', -1));
		$defaultModel->setState('tologged', $this->app->input->getInt('tologged'));
		$defaultModel->setState('option', $this->option);
		$defaultModel->setState('receiver', $this->app->input->getString('receiver', null));
		$defaultModel->setState('idMessage', $this->app->input->getInt('idMessage', 0));
		$defaultModel->setState('isLiveStreaming', $this->app->input->getInt('livestreaming', null));
		
		return $defaultModel;
	}
	
	/**
	 * Display only form for users
	 * 
	 * @access public
	 * @return void
	 */
	public function display($cachable = false, $urlparams = false) {
		// Populate model state and get model
		$model = $this->setModelState('chatattachments', false);
		
		// Show always form view
		parent::display($cachable, $urlparams);
	}
	
	/**
	 * Save uploaded file to cache folder to let it stream to target user
	 *
	 * @access public
	 * @return bool
	 */
	public function saveEntity(): bool {
		// Populate model state and get model
		$model = $this->setModelState('chatattachments', false);
	
		// Upload file
		$model->storeEntity();
		
		// Show always form view
		parent::display();
		
		return true;
	}
	
	/**
	 * Download uploaded file sent by other user, view not needed in this case
	 *
	 * @access public
	 * @return void
	 */
	public function showEntity() {
		// Populate model state and get model
		$model = $this->setModelState('chatattachments', false);
	
		// Upload file
		$model->loadEntity();
	}
}
