<?php
declare(strict_types=1);
namespace App\Controller;

use App\JsonRpc\NewsServiceInterface;
use App\JsonRpc\WebsiteServiceInterface;
use App\Tools\PublicData;
use Hyperf\Di\Annotation\Inject;
use App\Tools\Result;
use Hyperf\Validation\Contract\ValidatorFactoryInterface;
use App\Constants\ErrorCode;
use App\Controller\PublicController;
use Hyperf\Context\Context;
use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\HttpServer\Contract\ResponseInterface;
/**
 * Class WebController
 * @package App\Controller
 */
class WebController extends AbstractController
{

    #[Inject]
    protected ValidatorFactoryInterface $validationFactory;
    private $publicServiceClient;
    /**
     * @var NewsServiceInterface
     */
    #[Inject]
    private $newsServiceClient;

    /**
     * @var WebsiteServiceInterface
     */
    #[Inject]
    private $websiteServiceClient;


    private $PublicController;

    public function __construct(PublicController $PublicController)
    {
        $this->PublicController = $PublicController;
    }

    /**
     * 获取栏目导航
     * @return array
     */
    public function getWebsiteCategory()
    {

        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'pageSize' => 'required'
            ],
            [
                'pageSize.required' => '显示条数不能为空'
            ]
        );
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }

        $data = [
            'website_id'=>Context::get("SiteId"),
            'pageSize'=>$requireData['pageSize']
        ];
        // var_dump("网站id:",Context::get("SiteId"));
        $result = $this->websiteServiceClient->getWebsiteCategory($data);
        if ($result['code'] != ErrorCode::SUCCESS) {
            return Result::error($result['message'],0,[]);
        }
        return Result::success($result['data']);
    }

    /**
     * 获取各省名称
     */
    public function getWebsiteDistrit()
    {
        $data= [
            'pid' => 0,
            'website_id'=>Context::get("SiteId")
        ];
        $result=$this->PublicController->getDistrictList($data);
        
        if ($result['code'] != ErrorCode::SUCCESS) {
            return Result::error($result['message'],0,[]);
        }
        // var_dump($result['data']);
        return Result::success($result['data']);
        
    }

     /**
     * 获取广告1
     * @return array
     */
    public function getWebsiteAdvertisement()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'adPlace' => 'required'
            ],
            [
                'adPlace.required' => '广告位置编号不能为空'
            ]
        );
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $data = [
            'website_id'=>Context::get("SiteId"),
            'ad_placeid'=>$requireData['adPlace']
        ]; 
        
        $result = $this->websiteServiceClient->getWebsiteAdvertisement($data);

        if ($result['code'] != ErrorCode::SUCCESS) {
            return Result::error($result['message'],0,[]);
        }
        return Result::success($result['data']);
    }

    /**
     * 搜索并获取职能部门
     */
    public function selectWebsiteDepartment(){
        $requireData = $this->request->all();
        $data = [
            
            'website_id'=>Context::get("SiteId")
        ]; 
       
        if(!empty($requireData)){
            $data = [
                'keyword'=>$requireData['keyword'],
                'website_id'=>Context::get("SiteId")
            ]; 
        }
   
        $result = $this->websiteServiceClient->selectWebsiteDepartment($data);
        if ($result['code'] != ErrorCode::SUCCESS) {
            return Result::error($result['message'],0,[]);
        }
        return Result::success($result['data']);
    }


    /**
     *各省市查询 
     */
    public function selectWebsiteArea()
    {
        $requireData = $this->request->all();
       
        $data=[];
        if(!empty($requireData)){
            $validator = $this->validationFactory->make(
                $requireData,
                [
                    'province' => 'required'
                ],
                [
                    'province.required' => '请先选择省份'
                ]
            );
            if ($validator->fails()){
                $errorMessage = $validator->errors()->first();
                return Result::error($errorMessage);
            }
            $data=[
                'province' => $requireData['province']
            ];
            if(isset($requireData['city'])){
                
                $data=[
                    'city' => $requireData['city'],
                    'province' => $requireData['province']
                    
                ];
                
                if(isset($requireData['region'])){
                    $data=[
                        'province' => $requireData['province'],
                        'city' => $requireData['city'],
                        'region' => $requireData['region']
                    ];
                }
            }
        }
        $result = $this->websiteServiceClient->selectWebsiteArea($data);
        if ($result['code'] != ErrorCode::SUCCESS) {
            return Result::error($result['message'],0,[]);
        }
        return Result::success($result['data']);
    }
    
    /**
     * 获取新闻
     */
    public function getWebsiteArticlett()
    {
       
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'level' => 'required',
                'pageSize' => 'required',
            ],
            [
                'level.required' => '新闻类型不能为空',
                'pageSize.required' => '显示条数不能为空',

            ]
        );
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        if(isset($requireData['placeid']) && !empty($requireData['placeid'])){
            $data =[
            'website_id'=>Context::get("SiteId"),
            'level'=>$requireData['level'],
            'pageSize'=>$requireData['pageSize'],
            'placeid' => $requireData['placeid']
            ];
            
        }else{
            $data = [
                'website_id'=>Context::get("SiteId"),
                'level'=>$requireData['level'],
                'pageSize'=>$requireData['pageSize']
            ]; 
        }
        $result = $this->newsServiceClient->getWebsiteArticlett($data);
        // var_dump($result);
        if ($result['code'] != ErrorCode::SUCCESS) {
            return Result::error($result['message'],0,[]);
        }
        return Result::success($result['data']);
        
    }

     /**
     * 获取模块新闻
     */
    public function getWebsiteModelArticles()
    {
        $requireData = $this->request->all();     
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'catid' => 'required',
                'level' => 'required',
                'pagesize' => 'required'
            ],
            [
                'catid.required' => '栏目id不能为空',
                'level.required' => '新闻类型不能为空',
                'pagesize.required' => '新闻条数不能为空'
            ]
        );
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }

        if(isset($requireData['placeid']) && !empty($requireData['placeid'])){
            $data =[
                'website_id'=>Context::get("SiteId"),
                'catid' => $requireData['catid'],
                'level' => $requireData['level'],
                'pagesize' => $requireData['pagesize'],
                'placeid' => $requireData['placeid']
            ];
        }else{
            $data = [
                'website_id'=>Context::get("SiteId"),
                'catid' => $requireData['catid'],
                'level' => $requireData['level'],
                'pagesize' => $requireData['pagesize']
            ];   
        }      
        $result = $this->newsServiceClient->getWebsiteModelArticles($data);
        // var_dump($result);
        if ($result['code'] != ErrorCode::SUCCESS) {
            return Result::error($result['message'],0,[]);
        }
        return Result::success($result['data']);
    }

    /**
     * 获取模块栏目
     */
    public function getWebsiteModelCategory()
    {
        $requireData = $this->request->all();     
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'placeid' => 'required',
                'pid' => 'required',
                'num' => 'required'
            ],
            [
                'placeid.required' => '栏目位置不能为空',
                'pid' => '栏目类型不能为空',
                'num' => '父级栏目数量'
            ]
        );
        
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $data = [
            'website_id'=>Context::get("SiteId"),
            'placeid' => $requireData['placeid'],
            'pid' => $requireData['pid'],
            'num' => $requireData['num']
        ];    
        $result=$this->websiteServiceClient->getWebsiteModelCategory($data);
        
        if ($result['code'] != ErrorCode::SUCCESS) {
            return Result::error($result['message'],0,[]);
        }
        // var_dump($result['data']);
        return Result::success($result['data']);
        
    }

     /**
     * 获取友情链接
     * @return array
     */
    public function selectWebsiteLinks()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'type' => 'required',
                'num' => 'required'
            ],
            [
                'type.required' => '友情链接类型不能为空',
                'num.required' => '友情链接数量不能为空'
            ]
        );
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $data = [
            'website_id'=>Context::get("SiteId"),
            'type'=>$requireData['type'],
            'num' =>$requireData['num']
        ];
        $result = $this->websiteServiceClient->selectWebsiteLinks($data);
        if ($result['code'] != ErrorCode::SUCCESS) {
            return Result::error($result['message'],0,[]);
        }
        return Result::success($result['data']);
    }

    /**
     * 获取文章列表
     */
    public function getWebsiteArticlesList()
    {
       
        $requireData = $this->request->all();
        if(isset($requireData['catid'])){
            $validator = $this->validationFactory->make(
            $requireData,
            [
                'catid' => 'required'
            ],
            [
                'catid.required' => '栏目id不能为空'

            ]
            );
            $data['catid'] =  $requireData['catid']; 
        }elseif(isset($requireData['keyword'])){
            $validator = $this->validationFactory->make(
                $requireData,
                [
                    'keyword' => 'required'
                ],
                [
                    'keyword.required' => '搜索词不能为空'
    
                ]
            );
            $data['keyword'] =  $requireData['keyword']; 
        }else{
            $validator = $this->validationFactory->make(
                $requireData,
                [
                    'catid' => 'required',
                    'keyword' => 'required'
                ],
                [
                    'catid.required' => '栏目id不能为空',
                    'keyword.required' => '搜索词不能为空'
    
                ]
            );
            $data['catid'] =  $requireData['catid']; 
            $data['keyword'] =  $requireData['keyword']; 
        }
        $validator = $this->validationFactory->make(
                $requireData,
                [
                    'page' => 'required',
                    'pageSize' => 'required'
                ],
                [
                    'page.required' => '分页不能为空',
                    'pageSize.required' => '显示条数不能为空'
    
                ]
            );
            if ($validator->fails()){
                $errorMessage = $validator->errors()->first();
                return Result::error($errorMessage);
            }
            $data['website_id'] = Context::get("SiteId");
            $data['pageSize'] = $requireData['pageSize']; 
            $data['page'] = $requireData['page']; 
        $result = $this->newsServiceClient->getArticleList($data);
        // var_dump($result);
        if ($result['code'] != ErrorCode::SUCCESS) {
            return Result::error($result['message'],0,[]);
        }
        // $result = $data; 
        return Result::success($result['data']);
        
    }
    
     /**
     * 获取文章详情
     */
    public function selectWebsiteArticleInfo()
    {
       
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'articleid' => 'required'
            ],
            [
                'articleid.required' => '新闻id不能为空'
            ]
        );
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $data = [
            'website_id'=>Context::get("SiteId"),
            'id'=>$requireData['articleid'],
        ]; 
        $result = $this->newsServiceClient->getArticleInfo($data);
        // var_dump($result);
        if ($result['code'] != ErrorCode::SUCCESS) {
            return Result::error($result['message'],0,[]);
        }
        return Result::success($result['data']);
        
    }
}