<?php

namespace App\Actions\Phonebook;

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

class GroupAction
{
    private $ldap;
    
    public function __construct(LdapService $ldap, Pages $view)
    {
        $this->ldap = $ldap;
	$this->view = $view;
    }

    public function get(ServerRequestInterface $request,
			ResponseInterface $response, array $args): ResponseInterface
    {
	$groups = $this->ldap->search_groups('*');
	$session = [];
	if(isset($_SESSION['select'])){
            foreach ($_SESSION['select'] as $user => $val){
		$session[$val][] = $user;
            }
	}
	/* if ($groups != []){
	   $group = $this->ldap->get_group($groups[0]['name']);
	   } */
	// echo var_dump($session);
	return $this->view->render($request, $response, 'groups.html', [
	    'data' => [],
	    'groups' => $groups,
	    'session' => $_SESSION,
            'sess_by_gr' => $session,
	    'currentPath' => $_SERVER['REQUEST_URI']
	]);
	
    }

    public function group(ServerRequestInterface $request,
			  ResponseInterface $response, array $args): ResponseInterface
    {
	$name = $args['name'];
	$group = $this->ldap->get_group($name);
	$groups = $this->ldap->search_groups("*");

	$sesison = [];
	// foreach ($_SESSION['select'] as $user => $val){
	//     $session[$val][] = $user;
	// }
	$params = $request->getQueryParams();
	if (isset($params['query']) AND $params['query']!=''){
	    $query = $params['query'];
	    $info = $this->ldap->search_with_group_without_list($query, $name);
	} else {
	    $query = '*';
	    $info = [];
	}

	/* echo var_dump($info); */
	return $this->view->render($request, $response, 'groups.html', [
	    'data' => $group,
	    'name' => $name,
	    'groups' => $groups,
	    'search' => $info,
	    'session' => $_SESSION,
        // 'sess_by_gr' => $session,
	    'currentPath' => $_SERVER['REQUEST_URI'],
	    'query' => $query
	]);
    }

    public function new(ServerRequestInterface $request,
			ResponseInterface $response, array $args): ResponseInterface
    {
        $params = $request->getParsedBody();

        $name = $params['group_name'];
        $prio = $params['group_prio'];

        $data['name'] = $name;
        if($prio){
            $data['prio'] = $prio;
        }
        $insert = $this->ldap->create_list($data);
	
        $groups = $this->ldap->search_groups('*');
        return $response->withStatus(302)
			->withHeader('Location', "/ui/group/$name");
    }

    public function add_to_list(ServerRequestInterface $request,
				ResponseInterface $response, array $args): ResponseInterface
    {
	$list_name = $args['name'];
	$body = json_decode($request->getBody(), true);

	if (isset($body['cmd']) & $body['cmd'] == 'del'){
            $res = $this->ldap->del_from_list($list_name, $body['name']);
	} else {
            $res = $this->ldap->add_to_list($list_name, $body['name']);}
	
	if($res){
	    $response->getBody()->write("ok");
	} else {
	    $response->getBody()->write("error");
	}
	
	return $response;

    }

    public function list_modify(ServerRequestInterface $request,
				ResponseInterface $response, array $args): ResponseInterface
    {
        $params = json_decode($request->getBody(), true);
        $list_name = $params['name'];
        $prio = $params['weidth'];
        $res = $this->ldap->modify_list($list_name, $prio);

        $response->getBody()->write("ok");
        return $response;
    }

    public function del_list(ServerRequestInterface $request,
			     ResponseInterface $response, array $args): ResponseInterface
    {
        $name = $args['name'];
        $res = $this->ldap->del_list($name);

        $response->getBody()->write("ok");
        return $response;
    }
}
