<?php

namespace App\Controller;

use App\Amqp\Producer\PrescriptionDistributePhProducer;
use App\Constants\HttpEnumCode;
use App\Exception\BusinessException;
use App\Model\DoctorInquiryTime;
use App\Model\DoctorPharmacistCert;
use App\Model\OrderInquiry;
use App\Model\UserDoctor;
use App\Request\UserRequest;
use App\Services\ImService;
use App\Services\UserDoctorService;
use App\Services\UserService;
use App\Utils\Http;
use App\Utils\Log;
use Extend\Alibaba\Oss;
use Extend\Ca\Ca;
use Extend\Prescription\Prescription;
use Extend\TencentIm\Account;
use Extend\TencentIm\Friend;
use Extend\TencentIm\Group;
use Extend\TencentIm\Message;
use Extend\TencentIm\Profile;
use Extend\TencentIm\RecentContact;
use Extend\VerifyDun\BankCard;
use Extend\VerifyDun\IdCard;
use Extend\Wechat\Wechat;
use Extend\Wechat\WechatPay;
use Hyperf\Amqp\Producer;
use Hyperf\DbConnection\Db;
use Hyperf\Snowflake\IdGeneratorInterface;
use Hyperf\Utils\ApplicationContext;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use Psr\Http\Message\ResponseInterface;
use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\DecodingExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;

class UserController extends AbstractController
{
    /**
     * 修改用户头像
     * @return ResponseInterface
     * @throws ContainerExceptionInterface
     * @throws NotFoundExceptionInterface
     */
    public function putUserAvatar(): ResponseInterface
    {
        $request = $this->container->get(UserRequest::class);
        $request->scene('putUserAvatar')->validateResolved();

        $UserService = new UserService();
        $data = $UserService->putUserAvatar();
        return $this->response->json($data);
    }

    /**
     * 修改用户名
     * @return ResponseInterface
     * @throws ContainerExceptionInterface
     * @throws NotFoundExceptionInterface
     */
    public function putUserName(): ResponseInterface
    {
        $request = $this->container->get(UserRequest::class);
        $request->scene('putUserName')->validateResolved();

        $UserService = new UserService();
        $data = $UserService->putUserName();
        return $this->response->json($data);
    }

    /**
     * 退出登陆
     * @return ResponseInterface
     * @throws ContainerExceptionInterface
     * @throws NotFoundExceptionInterface
     */
    public function putLoginout(): ResponseInterface
    {
        $UserService = new UserService();
        $data = $UserService->putLoginout();
        return $this->response->json($data);
    }

    /**
     * 获取用户收获地址列表
     * @return ResponseInterface
     */
    public function getUserAddress(): ResponseInterface
    {
        $UserService = new UserService();
        $data = $UserService->getUserAddress();
        return $this->response->json($data);
    }

    /**
     * 获取用户收获地址详情
     * @return ResponseInterface
     */
    public function getUserAddressInfo(): ResponseInterface
    {
        $UserService = new UserService();
        $data = $UserService->getUserAddressInfo();
        return $this->response->json($data);
    }

    /**
     * 添加用户收获地址
     * @return ResponseInterface
     * @throws ContainerExceptionInterface
     * @throws NotFoundExceptionInterface
     */
    public function addUserAddress(): ResponseInterface
    {
        $request = $this->container->get(UserRequest::class);
        $request->scene('addUserAddress')->validateResolved();

        $UserService = new UserService();
        $data = $UserService->addUserAddress();
        return $this->response->json($data);
    }

    /**
     * 修改用户收获地址
     * @return ResponseInterface
     * @throws ContainerExceptionInterface
     * @throws NotFoundExceptionInterface
     */
    public function putUserAddress(): ResponseInterface
    {
        $request = $this->container->get(UserRequest::class);
        $request->scene('putUserAddress')->validateResolved();

        $UserService = new UserService();
        $data = $UserService->putUserAddress();
        return $this->response->json($data);
    }

    /**
     * 删除用户收获地址
     * @return ResponseInterface
     */
    public function deleteUserAddress(): ResponseInterface
    {
        $UserService = new UserService();
        $data = $UserService->deleteUserAddress();
        return $this->response->json($data);
    }


    // 支付测试
    public function testpay(){
        // 发起支付
        $out_trade_no = $this->request->input('out_trade_no');
//        $generator = $this->container->get(IdGeneratorInterface::class);
//
//        $WechatPay = new WechatPay(1,2);
//
//        // 获取预支付交易会话标识
//        $total =  0.01 * 100;
//        $prepay = $WechatPay->getJsapiPrepayId($out_trade_no,$total,"omgU35DlE-rxTAGgcBjOuc4xdcX8");
//        if (empty($prepay)){
//            return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败");
//        }
//
//        // 获取小程序支付配置
//        $pay_config = $WechatPay->getAppletsPayConfig($prepay['prepay_id']);
//        return $this->response->json($pay_config);

        // 发起退款
//        $WechatPay = new WechatPay(1,2);
//
//        $params = array();
//        $params['order_inquiry_id'] = 1;
//        $order_inquiry = OrderInquiry::getOne($params);
//
//
//        $options = array();
//        $options['transaction_id'] = "4200001756202303145016495897";
//        $options['out_refund_no'] = "123456";
//        $options['reason'] = "退款原因";
//        $options['amount'] = [
//            'refund' => (int)1,
//            'total' => (int)1,
//            'currency' => "CNY",
//        ];
//
//        $result = $WechatPay->refund($options);
//        dump($result);

        // 创建账号
        $account = new Account();
        $profile = new Profile();
        $group = new Group();
        $friend = new Friend();
        $message = new Message();
//        $result = $account->createAccount(10009,'测试患者9',"https://img.applets.igandanyiyuan.com/applet/doctor/avatar/03dc8df2-e7c0-4ad9-b87e-5133e40e0f76.jpg");

        // 查询账号导入状态
//        $result = $account->checkAccountStatus("123456");

        // 设置账户资料
//        $arg = array();
//        $arg['Tag_Profile_IM_Gender'] = "Gender_Type_Male";
//        $arg['Tag_Profile_IM_BirthDay'] = 19961007;
//        $arg['Tag_Profile_Custom_Hname'] = "协和医院";
//        $arg['Tag_Profile_Custom_Title'] = "主任医师";
//        $result = $profile->setProfile("123456",$arg);

        // 添加用户好友分组
//        $result = $group->addUserGroup('123456');

        // 获取用户好友分组
//        $result = $group->getUserGroup('123456');

        // 添加好友
//        $result = $friend->addFriend("123456",'1234567',"快速问诊");

        // 发送消息
//        $arg = array();
////        $arg['From_Account'] = "10000"; // 发送方user_id 如系统发送，无需填写
//        $arg['To_Account'] = "10000"; // 接收方user_id
////        $arg['ForbidCallbackControl'] = ['ForbidBeforeSendMsgCallback'];
////        $arg['SendMsgControl'] = [];
//
//        $arg['MsgBody'] = [
////            [
////                "MsgType" => "TIMTextElem",
////                "MsgContent" => [
////                    "Text" => "ceshi",
////                ],
////            ]
//            [
//                "MsgType" => "TIMCustomElem",
//                "MsgContent" => [
//                    "Data" => "{\"message_type\":1,\"content\":\"\"}",
//                    "Desc" => "自定义消息",
//                    "Ext" => "url",
//                    "Sound" => "dingdong.aiff",
//                ],
//            ]
//        ];
//
//        // 自定义消息
//        $cloud_custom_data = array();
//        $cloud_custom_data['order_inquiry_id'] = 1;
//        $cloud_custom_data['is_system'] = 0;
//        $cloud_custom_data['inquiry_type'] = 2;
//
//        $arg['CloudCustomData'] = json_encode($cloud_custom_data,JSON_UNESCAPED_UNICODE);
//
//        $result = $message->sendMessage($arg);
//
////        $result = $profile->getOneAccountPortraitList("123456");
//
//        dump($result);


        // 专家-公益，发送im消息
//        $ImService = new ImService();
//
//        // 获取订单医生数据
//        $params = array();
//        $params['doctor_id'] = "491925054779883520";
//        $user_doctor = UserDoctor::getOne($params);
//        if (empty($user_doctor)){
//            Log::getInstance()->info("医生数据错误");
//        }
//
//        // 发送消息
//        $ImService->sendMessage($user_doctor['user_id'],"491923510680424449","等待医生接诊",491937904055369728);

//
//        $data = array();
//        $data['order_inquiry_id'] = 4;
//        $data['to_user_id'] = 10004;
//        $data['patient_name'] = "用户4";
//        $data['patient_sex'] = 2;
//        $data['patient_age'] = 19;
//        $data['inquiry_status'] = 1;
//        $data['message_send_time'] = 1678112190;
//        $data['message_seq'] = 101;
//        $data['message_type'] = "TIMTextElem";
//        $data['last_message_content']['Text'] = "测试消息4";
//
//        $imService = new ImService();
//        $imService->addRecentContactRecordCache("491925054779883520", 2, 10004, $data);

        // 银行卡三要素认证
//        $BankCard = new BankCard();
//
//        $params = array();
//        $params['bankCardNo'] = "6217000010175646317";
//        $params['name'] = "吴从兴";
//        $params['idCardNo'] = "372929199610075412";
//        $res = $BankCard->checkBankCard($params);
//        if (!empty($res)) {
//            return fail(HttpEnumCode::HTTP_ERROR, $res);
//        }

        // 对接处方平台
//        $Prescription = new Prescription();
//        $token = $Prescription->getProd();
//        dump($token);

        // 创建im账号
//        $account = new Account();
        // 创建单个账号
//        $account->createAccount("111295","测试患者1","");
//        $profile = new Profile();
//        $result = $profile->getOneAccountPortraitList("111295");
//        dump($result);
//        $arg = array();
//        $arg['Tag_Profile_IM_Image'] = "https://img.applets.igandanyiyuan.com/applet/doctor/avatar/03dc8df2-e7c0-4ad9-b87e-5133e40e0f76.jpg";
//        $profile->setProfile("111295",$arg);

//        $ImService = new ImService();
//        $ImService->setUserProfile("491925054435950592");

//        $Prescription = new Prescription();
//        $token = $Prescription->getLogisticsFee();
//        dump($token);


//        $ImService = new ImService();
//
//        // 发送消息
//        $ImService->sendMessage("491925054435950592","492404831991414785","等待医生接诊","494837308861095936",1);



//        $ImService = new ImService();
//        // 发送消息
        // 自定义消息
//        $cloud_custom_data = array();
//        $cloud_custom_data['order_inquiry_id'] = "494837308861095936";
//        $cloud_custom_data['is_system'] = 1;
//        $cloud_custom_data['inquiry_type'] = 1;
//
//        // 消息内容
//        $message_content_data = array();
//        $message_content_data['message_type'] = 1;
//        $message_content_data['content'] = "--测试--";
//        $message_content_data['desc'] = "温馨提示：您可继续补充问诊内容，便于更快确认病情，医生均在临床一线工作，还请耐心等待，医生接诊会第一时间短信通知您。";
//        $message_content = [
//            'Data' => json_encode($message_content_data,JSON_UNESCAPED_UNICODE),
//        ];
//
//        $ImService->sendMessage("491925054435950592", "492404831991414785", $message_content, "TIMCustomElem", $cloud_custom_data);
//
//        $RecentContact = new RecentContact();
//        $result = $RecentContact->getRecentContactPage();


    }
}