<?php

namespace App\Http\Controllers\API\Admin\YeWu;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;

class PEISApiController extends Controller
{
  public static $request;

  public static function Api($url_code, $code)
  {
    $url = 'https://dqgatjzx-wx.sixinyun.com';
    $api['套餐详情查询'] = "{$url}/PEISCommon/QueryComboDetail/{$code}";
    $api['自选项目查询'] = "{$url}/PEISCommon/QueryGroups/{$code}";
    $api['套餐查询'] = "{$url}/PEISCommon/QueryCombos/{$code}";
    return $api["{$url_code}"] ?? $url_code;
  }

  public static function Post($url_code, $hospital_id, $data, $print = false)
  {

    $hospital = DB::table('hospitals')->where(['id' => $hospital_id, 'status' => 1, 'is_del' => 0])->first();
    if (!$hospital) return \Yz::echoError1('医院不存在或不可用');
    $code = $hospital->code;
    $url = self::Api($url_code, $code);
        self::RequestLog($url, $data, $code, $url_code);
    $data_string = json_encode($data, JSON_UNESCAPED_UNICODE);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
      'Content-Type: application/json; charset=utf-8',
      'Content-Length: ' . strlen($data_string)
    ]);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
    $res_string = curl_exec($ch);
    curl_close($ch);

    $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();



    if (!json_decode($res_string, true)) {
      return \Yz::Return(false, '获取失败', [
        'url' => $url,
        'data' => $data,
        'res' => $res_string
      ]);
    }
    $res = json_decode($res_string, true);


    return [
      'code' => $res['ResultCode'],
      'message' => $res['ResultContent'],
      'data' => $res['Records']
    ];
  }

  public static function RequestLog($url, $post_data, $code, $mark)
  {
    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', 300);
        $table->timestamps();
      });
    }
    self::$request = new \App\Models\PEISLog();
    self::$request->setTable($table_name);
  }
}
