<?php
/*
** Job Arranger Manager
** Copyright (C) 2023 Daiwa Institute of Research Ltd. All Rights Reserved.
**
** Licensed to the Apache Software Foundation (ASF) under one or more
** contributor license agreements. See the NOTICE file distributed with
** this work for additional information regarding copyright ownership.
** The ASF licenses this file to you under the Apache License, Version 2.0
** (the "License"); you may not use this file except in compliance with
** the License. You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
**
**/

namespace App\Controllers\Api;

use App\Utils\Constants;
use App\Utils\Core;

/**
 * This controller is used to manage zabbix api request.
 *
 * @version    6.1.0
 * @since      Class available since version 6.1.0
 */
class ZabbixApi
{
    /**
     * It requests host,item and trigger info for zabbix linkage icon.
     *
     * @param  string      $method could be method name
     * @param  array       $params 
     * @return string|bool $result could be string if success,could be bool if fail  
     * @since   Method available since version 6.1.0
     */

    private $logger;

    public static function RequestApi($method, $params)
    {


        $url = ZBX_API_ROOT . Constants::ZBX_MAIN_END_POINT;
        $sslVerificationFlag = SSL_VERIFICATION == 1;
        $payload = json_encode(array(
            'jsonrpc' => '2.0',
            'method' => $method,
            'params' => $params,
            'auth' => $_SESSION['userInfo']['sessionId'],
            'id' => 1
        ));

        $options = [
            'http' => [
                'header' => "Content-Type: application/json\r\n",
                'method' => 'POST',
                'content' => $payload,
            ],
            'ssl' => [
                'verify_peer' => $sslVerificationFlag,
                'verify_peer_name' => $sslVerificationFlag,
            ],
        ];

        $context = stream_context_create($options);

        // Perform the HTTP request and get the response
        $result = file_get_contents($url, false, $context);

        return $result;
    }


    public static function GetUserGroup($sessionId, $userId)
    {
        // Get logger from Core 
        Core::logger()->info("#3805 userId in GetUserGroup : ". print_r($userId, true));
        Core::logger()->info("#3805 sessionId in GetUserGroup : ". print_r($sessionId, true));

        $url = ZBX_API_ROOT . Constants::ZBX_MAIN_END_POINT;
        Core::logger()->info("#3805 url in GetUserGroup : ". print_r($url, true));

        $sslVerificationFlag = SSL_VERIFICATION == 1;
        Core::logger()->info("#3805 sslVerificationFlag in GetUserGroup : ". print_r($sslVerificationFlag, true));

        $payload = json_encode(array(
            'jsonrpc' => '2.0',
            'method' => 'usergroup.get',
            'params' => [
                'output' => 'extend',
                'status' => 0,
                'userids' => $userId
            ],
            'id' => 1,
            'auth' => $sessionId
        ));
        Core::logger()->info("#3805 payload : ". print_r($payload, true));

        $options = [
            'http' => [
                'header' => "Content-Type: application/json\r\n",
                'method' => 'POST',
                'content' => $payload,
            ],
            'ssl' => [
                'verify_peer' => $sslVerificationFlag,
                'verify_peer_name' => $sslVerificationFlag,
            ],
        ];
        Core::logger()->info("#3805 options in GetUserGroup : ". print_r($options, true));

        $context = stream_context_create($options);
        Core::logger()->info("#3805 context in GetUserGroup : ". print_r($context, true));

        // Perform the HTTP request and get the response
        $result = file_get_contents($url, false, $context);
        Core::logger()->info("#3805 result in GetUserGroup : ". print_r($result, true));

        return $result;
    }
}
