<?php

declare(strict_types=1);

namespace App\Controller;

use App\JsonRpc\AdServiceInterface;
use App\Tools\PublicData;
use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpServer\Annotation\AutoController;
use App\Tools\Result;
use App\Constants\ErrorCode;
use Hyperf\Logger;
use Hyperf\Validation\Contract\ValidatorFactoryInterface;
use Hyperf\Context\Context;

/**
 * Class AdController
 * @package App\Controller
 */
//#[AutoController]
class AdController extends AbstractController
{
    #[Inject]
    protected ValidatorFactoryInterface $validationFactory;
    /**
     * @var AdServiceInterface
     */
    #[Inject]
    private  $adServiceClient;

    /**
     * 创建广告-todo
     * @return array
     */
    public function createAd()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'name' => 'required',
                'website_id' => 'required',
                'price' => 'required',
            ],
            [
                'name.required' => '名称不能为空',
                'website_id.required' => '站点不能为空',
                'price.required' => '价格不能为空',
            ]
        );
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $result = $this->adServiceClient->createAd($requireData);
        return $result?Result::success($result['data']):Result::error($result['message']);
    }

    /**
     * @return array|void
     */
    public function getAdInfo()
    {
        $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);
        }
        $id = (int)$requireData['id'];
        $result =  $this->adServiceClient->getAdInfo($id);
        if ($result['code'] != ErrorCode::SUCCESS) {
            return Result::error($result['message'],0);
        }
        return Result::success($result['data']);
    }

    /**
     * 获取广告列表
     * @return array
     */
    public function getAdList()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'pid'=> 'required',
                'page' => 'required',
                'pageSize' => 'required',
            ],
            [
                'pid.required' => '广告位id不能为空',
                'page.required' => '页码数不能为空',
                'pageSize.required' => '每页显示条数不能为空',
            ]
        );
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $nowTime = date("Y-m-d H:i:s");
        $result = $this->adServiceClient->getAdList($requireData);
        if($result['data']){
            $typeList = ['1'=>'文字','2'=>'图文'];
            $statusName = ['1'=>'通过','2'=>'待审'];
            foreach ($result['data']['rows'] as $k=>$v) {
                $result['data']['rows'][$k]['type_name'] = $typeList[$v['typeid']];
                $result['data']['rows'][$k]['status_name'] = $statusName[$v['status']];
                $result['data']['rows'][$k]['day'] = PublicData::residueDay(date("Y-m-d H:i:s"),$v['totime'])>0?PublicData::residueDay(date("Y-m-d H:i:s"),$v['totime']):0;
                if($nowTime<$v['fromtime']){
                    $result['data']['rows'][$k]['runing_name'] = '未开始';
                }else if($nowTime>$v['totime']){
                    $result['data']['rows'][$k]['runing_name'] = '已过期';
                }else{
                    $result['data']['rows'][$k]['runing_name'] = '投放中';
                }

            }
        }
        return $result?Result::success($result['data']):Result::error($result['message']);
    }

    public function updateAd()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'name' => 'required',
                'status' => 'required',
            ],
            [
                'name.required' => '名称不能为空',
                'status.required' => '状态不能为空',
            ]
        );
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData = $this->request->all();
        $result = $this->adServiceClient->updateAd($requireData);
        return $result?Result::success($result['data']):Result::error($result['message']);
    }

    public function delAd()
    {
        $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->adServiceClient->delAd($requireData);
        var_dump($result);
        return $result?Result::success($result['data']):Result::error($result['message']);
    }

    /**
     * 获取广告位列表
     * @return array
     */
    public function getAdPlaceList()
    {

        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'page' => 'required',
                'pageSize' => 'required',
            ],
            [
                'page.required' => '页码数不能为空',
                'pageSize.required' => '每页显示条数不能为空',
            ]
        );
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $result = $this->adServiceClient->getAdPlaceList($requireData);
        if($result['data']){
            $typeList = ['1'=>'文字','2'=>'图文'];
            $statusName = ['1'=>'通过','2'=>'待审'];
            foreach ($result['data']['rows'] as $k=>$v) {
                $result['data']['rows'][$k]['type_name'] = $typeList[$v['typeid']];
                $result['data']['rows'][$k]['status_name'] = $statusName[$v['status']];
            }
        }
        return $result?Result::success($result['data']):Result::error($result['message']);
    }

    /**
     * 创建广告位
     * @return array
     */
    public function createAdPlace()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'name' => 'required', //广告位名称
                'website_id' => 'required',//关联的网站id
                'price' => 'required',//价格
                'thumb'=>'required', //广告示意图
                'typeid'=>'required', //广告类型
                'ad_size_id'=>'required', //广告位大小
                'status'=>'required', //状态
            ],
            [
                'name.required' => '名称不能为空',
                'website_id.required' => '站点不能为空',
                'price.required' => '价格不能为空',
                'thumb.required'=>'广告示意图必传', //广告示意图
                'typeid.required'=>'广告类型必选', //广告类型
                'ad_size_id.required'=>'广告大小必选', //广告位大小
                'status.required'=>'广告状态必选', //状态
            ]
        );
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $result = $this->adServiceClient->createAdPlace($requireData);
        return $result?Result::success($result['data']):Result::error($result['message']);
    }

    public function updateAdPlace()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required',
                'name' => 'required', //广告位名称
                'website_id' => 'required',//关联的网站id
                'price' => 'required',//价格
                'thumb'=>'required', //广告示意图
                'typeid'=>'required', //广告类型
                'ad_size_id'=>'required', //广告位大小
                'status'=>'required', //状态
            ],
            [
                'id.required' => 'id不能为空',
                'name.required' => '名称不能为空',
                'website_id.required' => '站点不能为空',
                'price.required' => '价格不能为空',
                'thumb.required'=>'广告示意图必传', //广告示意图
                'typeid.required'=>'广告类型必选', //广告类型
                'ad_size_id.required'=>'广告大小必选', //广告位大小
                'status.required'=>'广告状态必选', //状态
            ]
        );
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $result = $this->adServiceClient->updateAdPlace($requireData);
        return $result?Result::success($result['data']):Result::error($result['message']);
    }

    /**
     * 删除广告位
     * @return array
     */
    public function delAdPlace()
    {
        $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->adServiceClient->delAdPlace($requireData);
        return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
    }

    /**
     * 获取广告位详情
     * @return array
     */
    public function getAdPlaceInfo()
    {
        $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->adServiceClient->getAdPlaceInfo(intval($requireData['id']));
        return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
    }
}