<?php

namespace App\Controller;

use App\Request\InquiryRequest;
use App\Request\PatientOrderRequest;
use App\Services\InquiryService;
use App\Services\PatientOrderService;
use GuzzleHttp\Exception\GuzzleException;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use Psr\Http\Message\ResponseInterface;

/**
 * 患者订单
 */
class PatientOrderController extends AbstractController
{
    /**
     * 获取患者问诊订单列表
     * @return ResponseInterface
     * @throws ContainerExceptionInterface
     * @throws NotFoundExceptionInterface
     */
    public function getPatientInquiryOrderList(): ResponseInterface
    {
        $request = $this->container->get(PatientOrderRequest::class);
        $request->scene('getPatientInquiryOrderList')->validateResolved();

        $PatientOrderService = new PatientOrderService();
        $data = $PatientOrderService->getPatientInquiryOrderList();
        return $this->response->json($data);
    }

    /**
     * 获取患者问诊订单详情
     * @return ResponseInterface
     */
    public function getPatientInquiryOrderInfo(): ResponseInterface
    {
        $PatientOrderService = new PatientOrderService();
        $data = $PatientOrderService->getPatientInquiryOrderInfo();
        return $this->response->json($data);
    }

    /**
     * 取消患者问诊订单
     * @return ResponseInterface
     * @throws ContainerExceptionInterface
     * @throws NotFoundExceptionInterface
     */
    public function putCancelPatientInquiryOrder(): ResponseInterface
    {
        $PatientOrderService = new PatientOrderService();
        $data = $PatientOrderService->putCancelPatientInquiryOrder();
        return $this->response->json($data);
    }

    /**
     * 删除问诊订单
     * @return ResponseInterface
     */
    public function deletePatientInquiryOrder(): ResponseInterface
    {
        $PatientOrderService = new PatientOrderService();
        $data = $PatientOrderService->deletePatientInquiryOrder();
        return $this->response->json($data);
    }

    /**
     * 问诊订单取消支付
     * @return ResponseInterface
     */
    public function putPatientInquiryOrderCancelPay(): ResponseInterface
    {
        $PatientOrderService = new PatientOrderService();
        $data = $PatientOrderService->putPatientInquiryOrderCancelPay();
        return $this->response->json($data);
    }

    /**
     * 获取药品订单列表
     * @return ResponseInterface
     * @throws ContainerExceptionInterface
     * @throws NotFoundExceptionInterface
     */
    public function getPatientProductOrderList(): ResponseInterface
    {
        $request = $this->container->get(PatientOrderRequest::class);
        $request->scene('getPatientProductOrderList')->validateResolved();

        $PatientOrderService = new PatientOrderService();
        $data = $PatientOrderService->getPatientProductOrderList();
        return $this->response->json($data);
    }

    /**
     * 获取药品订单详情
     * @return ResponseInterface
     */
    public function getPatientProductOrderInfo(): ResponseInterface
    {
        $PatientOrderService = new PatientOrderService();
        $data = $PatientOrderService->getPatientProductOrderInfo();
        return $this->response->json($data);
    }

    /**
     * 药品订单取消支付
     * @return ResponseInterface
     */
    public function putPatientProductOrderCancelPay(): ResponseInterface
    {
        $PatientOrderService = new PatientOrderService();
        $data = $PatientOrderService->putPatientProductOrderCancelPay();
        return $this->response->json($data);
    }

    /**
     * 删除药品订单
     * @return ResponseInterface
     */
    public function deletePatientProductOrder(): ResponseInterface
    {
        $PatientOrderService = new PatientOrderService();
        $data = $PatientOrderService->deletePatientProductOrder();
        return $this->response->json($data);
    }

    /**
     * 获取患者订单支付数据
     * @return ResponseInterface
     * @throws ContainerExceptionInterface
     * @throws NotFoundExceptionInterface
     */
    public function getPatientOrderPayInfo(): ResponseInterface
    {
        $request = $this->container->get(PatientOrderRequest::class);
        $request->scene('getPatientOrderPayInfo')->validateResolved();

        $PatientOrderService = new PatientOrderService();
        $data = $PatientOrderService->getPatientOrderPayInfo();
        return $this->response->json($data);
    }

    /**
     * 模拟支付成功-金额为0时使用
     * @return ResponseInterface
     * @throws ContainerExceptionInterface
     * @throws NotFoundExceptionInterface|GuzzleException
     */
    public function addPatientOrderPay(): ResponseInterface
    {
        $request = $this->container->get(PatientOrderRequest::class);
        $request->scene('addPatientOrderPay')->validateResolved();

        $PatientOrderService = new PatientOrderService();
        $data = $PatientOrderService->addPatientOrderPay();
        return $this->response->json($data);
    }

    /**
     * 创建药品订单
     * @return ResponseInterface
     * @throws ContainerExceptionInterface
     * @throws NotFoundExceptionInterface
     */
    public function addPatientProductOrder(): ResponseInterface
    {
        $request = $this->container->get(PatientOrderRequest::class);
        $request->scene('addPatientProductOrder')->validateResolved();

        $PatientOrderService = new PatientOrderService();
        $data = $PatientOrderService->addPatientProductOrder();
        return $this->response->json($data);
    }

    /**
     * 获取处方订单列表
     * @return ResponseInterface
     * @throws ContainerExceptionInterface
     * @throws NotFoundExceptionInterface
     */
    public function getPatientPrescriptionOrderList(): ResponseInterface
    {
        $request = $this->container->get(PatientOrderRequest::class);
        $request->scene('getPatientPrescriptionOrderList')->validateResolved();

        $PatientOrderService = new PatientOrderService();
        $data = $PatientOrderService->getPatientPrescriptionOrderList();
        return $this->response->json($data);
    }

    /**
     * 获取处方订单详情
     * @return ResponseInterface
     */
    public function getPatientPrescriptionOrderInfo(): ResponseInterface
    {
        $PatientOrderService = new PatientOrderService();
        $data = $PatientOrderService->getPatientPrescriptionOrderInfo();
        return $this->response->json($data);
    }

    /**
     * 获取处方订单支付页详情
     * @return ResponseInterface
     */
    public function getPatientPrescriptionOrderPayInfo(): ResponseInterface
    {
        $PatientOrderService = new PatientOrderService();
        $data = $PatientOrderService->getPatientPrescriptionOrderPayInfo();
        return $this->response->json($data);
    }

    /**
     * 删除处方订单记录
     * @return ResponseInterface
     */
    public function deletePatientPrescriptionOrder(): ResponseInterface
    {
        $PatientOrderService = new PatientOrderService();
        $data = $PatientOrderService->deletePatientPrescriptionOrder();
        return $this->response->json($data);
    }
}