<?php

namespace App\Actions\Session;

use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use App\Services\LdapService;
use App\Services\ApiService;
use App\View\Pages;
use \DateTime;

class ReportAction
{

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

    public function report(ServerRequestInterface $request,
			   ResponseInterface $response, array $args): ResponseInterface
    {
	/* $operators = $this->ldap->operator_list(); */
	/* echo var_dump($args); */
	$uuid = $args['uuid'];
	/* $data = $this->get_session_data($name); */
	/* $api = new FSAPI($this->rest); */
	$session = $this->rest->session_info($uuid);
	$current_session = $this->rest->session();
	/* foreach($data['meta'] as $gr => $u){
	   foreach($u as $usr){
	   if(isset($this->status_code[$usr[4]])){
	   $usr[4] = $this->status_code[$usr[4]];
	   }
	   }
	   } */
	/* echo var_dump($session); */
	return $this->view->render($request, $response, 'session/report.html', [
	    'name' => $session->name,
	    'operator' => $_SESSION['user'],
	    /* 'time' => $data['time'],
	       'status' => $data['status'],
	       'meta' => $data['meta'], */
	    'current_session' => $current_session,
	    'session' => $session,
	    'status_code' => $this->status_code
	]);
    }

    public function archive_show(ServerRequestInterface $request,
				 ResponseInterface $response, array $args): ResponseInterface
    {
	$uid = $args['name'];
	$arch = $this->ldap->archive_record($uid);
	/* $view = Twig::fromRequest($request); */
	$name = $args['name'];
	$title= '';
	if(isset($arch['descr'])){
	    $title = $arch['descr'];
	}
	/* echo var_dump($this->status_code); */
	/* echo var_dump(json_decode($arch['meta'], true)); */
	return $this->view->render($request, $response, 'archive_report.html', [
	    'uid' => $uid,
	    'name' => $arch['name'],
	    'start_time' => $arch['start_time'],
	    'stop_time' => $arch['stop_time'],
	    'user' => $arch['user'],
	    'title' => $title,
	    'meta' => $arch['meta'],
	    'status_code' => $this->status_code
	]);
    }

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

	$params = $request->getQueryParams();
	if($params){
	    $startDate = DateTime::createFromFormat('Y-m-d',
						    $params['startDate']);
	    $stopDate = DateTime::createFromFormat('Y-m-d',
						   $params['endDate']);
	}
	else {
	    $startDate = (new DateTime('-30 days'));
	    $stopDate = (new DateTime());
	}
	$archives = $this->ldap->archive_list($startDate, $stopDate);
	/* echo var_dump($archives); */
	return $this->view->render($request, $response, 'archive.html', [
	    'archives' => $archives
	    
	]);
    }

    public function archive(ServerRequestInterface $request,
			    ResponseInterface $response, array $args): ResponseInterface
    {
	$uuid = $args['uuid'];
	$params = $request->getParsedBody();
	/* $api = new FSAPI($this->rest); */
	$session = $this->rest->session_info($uuid);
	/* $view = Twig::fromRequest($request); */
	/* $data = $this->get_session_data($name); */
	$archive = ['start_time' => $session->startTime,
		    'stop_time' => $session->compliteTime,
		    'user' => $params['operator'],
		    'descr' => $params['text'],
		    'name' => $session->name,
		    'session_id' => $uuid,
		    'meta' => $session->for_report()];
	echo var_dump($archive['meta']);
	$res = $this->ldap->insert_archive($archive);
	
        return $response->withStatus(302)
			->withHeader('Location', "/ui/archive");
    }


    public function delete_archive(ServerRequestInterface $request,
				   ResponseInterface $response, array $args): ResponseInterface
    {
	$name = $args['name'];
	$this->ldap->archive_delete($name);
	echo var_dump($name);
	return $response->withStatus(302)
			->withHeader('Location', "/ui/archive");
    }
    
    private function get_session_data($name){
	/* $api = new FSAPI($this->rest); */
	$session = $this->rest->session_info($name);
	$temp_users = [];
	/* echo var_dump($session['data'][0]['meta']); */
	foreach ($session['data'][0]['meta'] as $u){
	    /* foreach ($u as $el){ */
	    $temp_users[$u[3]][] = $u;
	    /* } */
	};
	
	$done = $session['data'][0]['done'];
	foreach ($done as $n => $key ){
	    $done[$n][0] = $key[0];
	    $done[$n][1] = explode(" ",$key[1])[0];
	    $done[$n][2] = explode(" ",$key[2])[0];
	    $done[$n][3] = explode(" ",$key[4])[0];
	}

	$temp = $session['data'][0]['meta'];
	/* echo var_dump($done); */
	$meta = [];
	foreach ($temp_users as $group_name => $val){
	    /* echo var_dump($val); */
	    $users = [];
	    /* echo var_dump($group_name); */
	    foreach($val as $el){
		$mobile = $el[2];
		$pattern = '/80(\d{9})/';
		$replacement = '+375\1';
		$mobile = preg_replace($pattern, $replacement, $mobile);
		$pattern = '/(\d{6})\d{4}(\d{2})/';
		$replacement = '\1xxxx\2';
		$newMobile = preg_replace($pattern, $replacement, $mobile);
		/* echo var_dump($el); */
		/* $el[] = $done[$el[2]][0]; */
		if( $done[$el[2]][0] == "dtmf"){
		    $el[] = $done[$el[2]][0];
		} else {
		    $el[] = $done[$el[2]][1];
		}
		$el[] = $done[$el[2]][2];
		$el[] = $done[$el[2]][3];
		$el[2] = $newMobile;
		/* echo var_dump($el); */
		$users[] = $el;

	    }
	    $meta[$group_name] = $users;
	}
	return ['meta' => $meta,
		'status' => $done,
		'time' => $session['data'][0]['time']];	
    }
}
