<?php

declare (strict_types = 1);

namespace App\Controller;

use App\JsonRpc\OrderServiceInterface;
use App\Tools\Result;
use Hyperf\Context\Context;
use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\HttpServer\Contract\ResponseInterface;
use Hyperf\Validation\Contract\ValidatorFactoryInterface;

/**
 * Class OrderController
 * @package App\Controller
 */
class OrderController extends AbstractController
{
    #[Inject]
    protected ValidatorFactoryInterface $validationFactory;

    /**
     * @var OrderServiceInterface
     */
    #[Inject]
    private $orderServiceClient;
    public function index(RequestInterface $request, ResponseInterface $response)
    {
        return $response->raw('Hello Hyperf!');
    }

    /***
     * 状态说明
     */
    public function getStauts()
    {
        $data['order'] = [
            1 => '通过',
            2 => '驳回',
            3 => '撤回',
            4 => '修改',
            5 => '过期',
            6 => '待审核',
            7 => '结束',
        ];
        $data['order_ad'] = [
            1 => '待投放',
            2 => '驳回',
            3 => '撤回',
            4 => '修改',
            5 => '过期',
            6 => '待审核',
            7 => '结束',
            8 => '投放中',
        ];
        return Result::success($data);

    }
    /**
     * 查询广告位
     */
    public function getAD()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'width' => 'required',
                'height' => 'required',
                'starttime' => 'required',
                'endtime' => 'required',
                'pageSize' => 'required',
                'page' => 'required',

            ],
            [
                'width.required' => '图片宽度不能为空',
                'height.required' => '图片高度不能为空',
                'starttime.required' => '广告开始时间不能为空',
                'endtime.required' => '广告结束时间不能为空',
                'pageSize.required' => '显示条数不能为空',
                'page.required' => '分页不能为空',

            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $result = $this->orderServiceClient->getAD($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }

    /**
     * 根据网站查找广告位
     */
    public function getWebsiteAd()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'width' => 'required',
                'height' => 'required',
                'starttime' => 'required',
                'endtime' => 'required',

            ],
            [
                'width.required' => '图片宽度不能为空',
                'height.required' => '图片高度不能为空',
                'starttime.required' => '广告开始时间不能为空',
                'endtime.required' => '广告结束时间不能为空',

            ]
        );
        if (!empty($requireData['website_id'])) {
            $validator = $this->validationFactory->make(
                $requireData,
                [
                    'website_id' => 'required',
                    'pageSize' => 'required',
                    'page' => 'required',

                ],
                [
                    'website_id.required' => '网站id不能为空',
                    'pageSize.required' => '显示条数不能为空',
                    'page.required' => '分页不能为空',

                ]
            );
        }
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }

        $result = $this->orderServiceClient->getWebsiteAd($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    public function getOrderListAdmin()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'pageSize' => 'required',
                'page' => 'required',

            ],
            [
                'pageSize.required' => '显示条数不能为空',
                'page.required' => '分页不能为空',

            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $result = $this->orderServiceClient->getOrderListAdmin($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }

    /**
     * 添加订单
     */
    public function addAD()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [

                'name' => 'required',
                'width' => 'required',
                'height' => 'required',
                'starttime' => 'required',
                'endtime' => 'required',
                'imgurl' => 'required',
                'imgsrc' => 'required',
                'pid' => 'required',
            ],
            [
                'name.required' => '广告名称不能为空',
                'width.required' => '图片宽度不能为空',
                'height.required' => '图片高度不能为空',
                'starttime.required' => '广告开始时间不能为空',
                'endtime.required' => '广告结束时间不能为空',
                'imgurl.required' => '图片广告链接不能为空',
                'imgsrc.required' => '图片广告地址不能为空',
                'pid.required' => '广告位id不能为空',

            ]
        );

        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $commaSeparatedString = $requireData['pid'];
        $array = explode(",", $commaSeparatedString);
        $requireData['pid'] = $array;
        $result = $this->orderServiceClient->addAD($requireData);
        // return $requireData;
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 获取订单列表
     */
    public function getOrderList()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'pageSize' => 'required',
                'page' => 'required',
            ],
            [
                'pageSize.required' => '显示条数不能为空',
                'page.required' => '分页不能为空',

            ]
        );
        if (isset($requireData['status'])) {
            $validator = $this->validationFactory->make(
                $requireData,
                [
                    'status' => 'required',
                ],
                [
                    'status.required' => '状态不能为空',
                ]
            );
        }
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->orderServiceClient->getOrderList($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 获取订单详情
     */
    public function getOrderDetail()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'order_id' => 'required',
                'pageSize' => 'required',
                'page' => 'required',
            ],
            [
                'name.required' => '订单id不能为空',
                'pageSize.required' => '显示条数不能为空',
                'page.required' => '分页不能为空',

            ]
        );

        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->orderServiceClient->getOrderDetail($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /***
     * 撤回订单
     */
    public function cancelOrder()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'order_id' => 'required',
            ],
            [
                'name.required' => '订单id不能为空',
            ]
        );

        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }

        $requireData['user_id'] = Context::get("UserId");
        $result = $this->orderServiceClient->cancelOrder($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);

    }
    // 获取订单详情
    public function getOrderDetailAdmin()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required',
            ],
            [
                'id.required' => '订单id不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }

        $result = $this->orderServiceClient->getOrderDetailAdmin($requireData);

        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 删除订单
     */
    public function delOrderAD()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [

                'id' => 'required',

            ],
            [
                'id.required' => 'id不能为空',

                'order_id' => 'required',
            ],
            [
                'name.required' => '订单id不能为空',

            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }

        $result = $this->orderServiceClient->getOrderDetailAdmin($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    //审核订单状态
    public function applyOrderStatusAdmin()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required',
            ],
            [
                'id.required' => 'id不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $result = $this->orderServiceClient->applyOrderStatusAdmin($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    //修改订单价格
    public function editPriceOrderAdmin()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required',
                'price' => 'required|decimal:2',

            ],
            [
                'id.required' => 'id不能为空',
                'price.required' => '价格不能为空',
                'price.decimal' => '价格格式不正确',

            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $result = $this->orderServiceClient->editPriceOrderAdmin($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    public function rejectOrderAdmin()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required',
                'reason' => 'required',
            ],
            [
                'id.required' => 'id不能为空',
                'reason.required' => '原因不能为空',

            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $result = $this->orderServiceClient->rejectOrderAdmin($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);

    }
    public function endOrderAdmin()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required',

            ],
            [
                'id.required' => 'id不能为空',

            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $result = $this->orderServiceClient->endOrderAdmin($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    public function delOrderAdmin()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required',

            ],
            [
                'id.required' => 'id不能为空',

            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $result = $this->orderServiceClient->delOrderAdmin($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
}