<?php
namespace App\Controllers\Admin;
use App\Core\Attributes\Route;
use App\Core\Service\Logger;
use App\Controllers\BaseController;
use App\Model\AdminModel;
use App\Model\AdminUserModel;
use App\Service\Kafkam;

class UserController extends BaseController
{
    private $AdminUserModel;
    private $AdminModel;
    public $Kafkam;
    public function __construct() {
        parent::__construct();
        $this->AdminModel = new AdminModel();
        $this->AdminUserModel = new AdminUserModel();
        $this->Kafkam = new Kafkam();
    }

    #[Route(method: 'GET', path: '/admin/user')]
    public function index() {
        echo "Hello Admin User ";
        echo "<pre>";
        print_r(Kafkam::$topics);
    }

    public function getPermissions() 
    {
        try {
            $rules = ['user_id' => array("rules" => 'required|max_length[100]', 'label' => "User")];
            $validation = $this->validateReqData($rules, $this->input);
            if(empty($validation['status'])) {
                throw new \Exception($validation['error']);
            }
            if(!$validation['valid']) {
                $this->sendResponse(array('code' => 400, 'message' => 'Validation Error', 'data'=>$validation['validation_error']));
            } 
            $usr = $this->AdminModel->getMasterData($this->AdminModel->tables['admin_user_master'], "id=".$this->input['user_id']);
            if(empty($usr['status'])) {
                throw new \Exception($usr['error']);
            }
            $resp = $this->AdminUserModel->getPermissions($usr['data']['id'], $usr['data']['is_master']);
            if(empty($resp['status'])) {
                throw new \Exception($resp['error']);
            } 
            $menu = [];
            for($i=0; $i<count($resp['data']); $i++) {
                if($resp['data'][$i]['menu_parent'] == 0){
                    $menu[] = $resp['data'][$i];
                }
            }
            for($i=0; $i<count($menu); $i++) {
                $menu[$i]['child_menus'] = [];
                for($j=0; $j<count($resp['data']); $j++) {
                    if($resp['data'][$j]['menu_parent'] == $menu[$i]['menu_id']){
                        $menu[$i]['child_menus'][] = $resp['data'][$j];
                    }
                }    
            }
            $this->sendResponse(array('code' => 200, 'message' => null, 'data'=> $menu));
        } catch(\Exception $e) {
            Logger::error($e->getMessage(), ['File' => $e->getFile(), 'Line'=>$e->getLine()]);
            $this->sendResponse(array('code' => 400, 'message' => $e->getMessage(), 'data'=> null));
        }
    }  
    
    public function updateUserRights() {
        try {
            $rules = ['user_rights' => array("rules" => 'required', 'label' => "User rights")];
            $validation = $this->validateReqData($rules, $this->input);
            if(empty($validation['status'])) {
                throw new \Exception($validation['error']);
            }
            if(!$validation['valid']) {
                $this->sendResponse(array('code' => 400, 'message' => 'Validation Error', 'data'=>$validation['validation_error']));
            } 
            $user_id = 0;
            foreach($this->input['user_rights'] as $rights) {
                $user_id = $rights['user_id'];
                break;
            }
            $this->AdminUserModel->deleteUserRights($user_id);
            $resp = $this->AdminUserModel->addUserRights($this->input['user_rights']);
            if(empty($resp['status'])) {
                throw new \Exception($resp['error']);
            }
            $this->sendResponse(array('code' => 200, 'message' => 'User rights updated succssfully'));
        } catch(\Exception $e) {
            Logger::error($e->getMessage(), ['File' => $e->getFile(), 'Line'=>$e->getLine()]);
            $this->sendResponse(array('code' => 400, 'message' => $e->getMessage(), 'data'=> null));
        }
    }
}