<?php

namespace App\Actions\Session;

use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use App\Services\ApiService;
use App\Modules\FSAPI\DuplicatSessionException;
use App\View\Pages;
use App\Mode\Session as S;
use App\Model\Exception\EmptyNumberException;
use App\Model\Exception\UserExistException;

class CreateSessionAction{

    private $rest;
    private $folder;
    private $defaults;
    private $view;
    
    public function __construct($config, ApiService $api, Pages $view)
    {
	$this->rest = $api;
	$this->folder = $config['media']['folder'];
	$this->defaults = $config['defaults'];
	$this->view = $view;
    }

    public function __invoke(ServerRequestInterface $request,
			     ResponseInterface $response, array $args): ResponseInterface
    {

	$params = $request->getParsedBody();
	$session_name = $params['session_name'];

	// TODO: участок кода для переноса в другой модуль
	$filename = $this->defaults['phrase'];
	if(($fp = fopen($filename, 'r')) !== FALSE){
	    while (($tmp = fgetcsv($fp, 100, ",")) !== FALSE) {
		$actions[] = [$tmp[0] => $tmp[1]];
	    }
	} else {
	    $actions[] = [['play' => 'anonce'],
			  ['sleep' => '1000'],
			  ['play' => 'message']];
	};
	// до этого места
	
	$session = [
	    'name' => $session_name,
	    'actions' => $actions,
	    'from_user' => $this->defaults['number_from'],
	    'repeate' => $this->defaults['repeate'],
	    'parallel' => $this->defaults['parallel'],
	    'pause' => $this->defaults['wait'],
	    'media' => "",
	    'anonce' => $this->folder."/"."anonce.wav",
	    'pattern' => $this->defaults['pattern'],
	    'number_for_record' => $this->defaults['number_record']
	];

	// TODO: участок кода для переноса в другой модуль
	try
	{
	    $session = $this->rest->create_session($session);
	    unset($_SESSION['select']);
	    return $response->withStatus(302)
			    ->withHeader('Location', "/ui/session/". $session['uuid']);
	}
	catch(DuplicatSessionException $ex){
	    $_SESSION['message'][] = [$ex->getMessage(),
				      'error'];
	    return $response->withStatus(302)->
	    withHeader('Location', "/ui/session");
	}
	// до этого места

    }
}
