<?php

namespace App\Http\Controllers\API\His;

use App\Http\Controllers\Controller;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Http\Client\RequestException;
use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Schema;

class HisController extends Controller
{
    public static $request;
    public static $baseUrl = 'http://192.168.80.39:7801';
    public static function Api($url_code)
    {
        $api['查询检查申请单'] = "/roc/order-service/api/v1/apply/pacs/apply/create/query";
        $api['查询科室列表'] = "/roc/curr-web/api/v1/common/dept/query";
        $api['查询人员列表'] = "/roc/curr-web/api/v1/common/employee/query";
        $api['查询非药品列表'] = "/roc/order-service/api/v1/order/order-term/undrug/query";
        $api['查询所有检查项目分类'] = "/roc/order-service/api/v1/order/order-term/dawn-code/query?consTypeId=EXAMSHEETTYPE";
        $api['查询医生有权限的科室'] = "/roc/curr-web/api/v1/common/dept/doctdept/query";
        return $api["{$url_code}"] ?? $url_code;
    }

    public static function Get($url_code, $data)
    {

        $url_address = self::Api($url_code);
        self::RequestLog(self::$baseUrl . $url_address, $data, $url_code, 'Roc接口');


            $response = Http::withHeaders([
                'Domain' => 'QhdLK_YYGL',
                'Key' => 'f7ed8036-b7a1-41ec-80f6-0e180efba1f4'
            ])->get(self::$baseUrl . $url_address, $data);

            // dd(self::BuildAuthorization($nonce, $timestamp, $base64Signature));
            if ($response->successful()) {
                // 处理成功的响应
                $res_string = json_encode($response->json(), JSON_UNESCAPED_UNICODE);
                // dd($res_string);
                $str_len = mb_strlen($res_string, 'utf-8');
                $str_size = $str_len / 1024;
                $save_res = $res_string;
                if ($str_size > 10) $save_res = '{"data":"Row size too large"}';
                self::$request->response_data = $save_res;
                self::$request->save();

                $res = json_decode($res_string, true);
                if ($res['code']<>200) {
                    throw new HttpResponseException(\Yz::JsonError("Roc接口提示：" . $res['msg']));
                }
                return [
                    'code' => $res['code'],
                    'message' => $res['msg'],
                    'data' => $res['data']
                ];
            } else {
                // 处理失败的响应
                self::$request->response_data = "请求Roc接口失败";
                self::$request->save();
                throw new HttpResponseException(\Yz::JsonError("请求Roc接口失败"));
            }

    }

    public static function RequestLog($url, $post_data, $mark, $code = 0)
    {
        self::CheckTableName();
        foreach ($post_data as $key => $post_datum) {
            $str_len = mb_strlen(json_encode($post_datum, JSON_UNESCAPED_UNICODE), 'utf-8');
            $str_size = $str_len / 1024;
            if ($str_size > 10) {
                $post_data["$key"] = 'Row size too large';
            }
        }
        $post_data = json_encode($post_data, JSON_UNESCAPED_UNICODE);
        self::$request->code = $code;
        self::$request->mark = $mark;
        self::$request->post_data = $post_data == '[]' ? '{}' : $post_data;
        self::$request->request_url = $url;
        self::$request->save();
    }

    public static function CheckTableName()
    {
        $table_name = 'zz_peis_log_' . date('ym');
        $table_count = DB::select('select count(1) as c from information_schema.TABLES where table_schema = ? and table_name = ?', [env('DB_DATABASE'), $table_name])[0];
        if ($table_count->c === 0) {
            Schema::create($table_name, function (Blueprint $table) {
                $table->id();
                $table->string('code', 50)->index();
                $table->string('mark', 50)->index();
                $table->text('post_data');
                $table->text('response_data')->nullable();
                $table->string('request_url', 2000);
                $table->timestamps();
            });
        }
        self::$request = new \App\Models\PEISLog();
        self::$request->setTable($table_name);
    }
}
