<?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 Hyperf\HttpServer\Annotation\AutoController;
use App\Tools\Result;
use Hyperf\Validation\Contract\ValidatorFactoryInterface;
use App\Constants\ErrorCode;
use Hyperf\Context\Context;

/**
 * Class WebController
 * @package App\Controller
 */
class WebController extends AbstractController
{

    #[Inject]
    protected ValidatorFactoryInterface $validationFactory;

    /**
     * @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()
    {
        $data = [
            'website_id'=>Context::get("SiteId")
        ];
        // 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();
        $data = ['website_id'=>Context::get("SiteId")]; 
        if($requireData['ad_tag']){
            $validator = $this->validationFactory->make(
                $requireData,
                [
                    'ad_tag' => 'required'
                ],
                [
                    'ad_tag.required' => '广告位置表示不能为空'
                ]
            );
            if ($validator->fails()){
                $errorMessage = $validator->errors()->first();
                return Result::error($errorMessage);
            }
            $data['ad_tag'] = $requireData['ad_tag'];
        }
        
        
        // return Result::success($data);//测试
        $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();
        // return Result::success($requireData);                          
        $result = $this->websiteServiceClient->selectWebsiteArea($requireData);
        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'],
            'id' => $requireData['id'],
            ];
            
        }else{
            $data = [
                'website_id'=>Context::get("SiteId"),
                'level'=>$requireData['level'],
                'pageSize'=>$requireData['pageSize'],
                'id' => $requireData['id'],
            ]; 
        }
        $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"),
            'pid' => $requireData['pid'],
            'placeid' => $requireData['placeid'],
            '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']);
    }

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

            ]
            );
            if(is_string($requireData['catid'])){
                $data['catid'] = json_decode($requireData['catid']); 
            }else{
                $data['catid'] = $requireData['catid']; 
            }
        }
            
        $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['catid'] =  $requireData['catid']; 
        if(isset($requireData['keyword']) && !empty($requireData['keyword'])){
            $data['keyword'] =  $requireData['keyword'];
        }

        $data['website_id'] = Context::get("SiteId");
        $data['pageSize'] = $requireData['pageSize']; 
        $data['page'] = $requireData['page']; 
        // return Result::success($data);
        $result = $this->newsServiceClient->getWebsiteArticleList($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->selectWebsiteArticleInfo($data);
        // var_dump($result);
        if ($result['code'] != ErrorCode::SUCCESS) {
            return Result::error($result['message'],0,[]);
        }
        return Result::success($result['data']);
        
    }
    /**
     * 获取网站底部信息
     * @return array
     */
    public function getWebsiteFootInfo()
    {
        $data = [
            'website_id'=>Context::get("SiteId")
        ];
        $result = $this->websiteServiceClient->getWebsiteFootInfo($data);
        if ($result['code'] != ErrorCode::SUCCESS) {
            return Result::error($result['message'],0,[]);
        }
        return Result::success($result['data']);
    }
    /**
     * 获取网站底部导航
     * @return array
    */
    public function getWebsiteFooterCategory()
    {
        $data = [
            'website_id'=>Context::get("SiteId")
        ];
        $result = $this->websiteServiceClient->getWebsiteFooterCategory($data);
        if ($result['code']!= ErrorCode::SUCCESS) {
            return Result::error($result['message'],0,[]); 
        }else{
            return Result::success($result['data']);
        }
    }
    /**
     * 获取网站底部导航列表
     * @return array
    */
    public function getWebsiteFooterCategoryList()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'fcat_id' =>'required|integer'
            ],
            [
                'fcat_id.required' => '底部导航栏目id不能为空',
                'fcat_id.integer' => '底部导航栏目id必须为整数'
            ]
        );
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first(); 
            return Result::error($errorMessage);
        }
        $data = [
            'fcat_id'=>$requireData['fcat_id'],
            'website_id'=>Context::get("SiteId")
        ];
        $result = $this->websiteServiceClient->getWebsiteFooterCategoryList($data);
        if ($result['code']!= ErrorCode::SUCCESS) {
            return Result::error($result['message'],0,[]); 
        }else{
            return Result::success($result['data']);
        }
    }
    /**
     * 获取网站底部导航内容
     * @return array
    */
    public function getWebsiteFooterCategoryInfo()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'fcat_id' =>'required|integer',
                'type' => 'nullable|in:0'
            ],
            [
                'fcat_id.required' => 'id不能为空',
                'fcat_id.integer' => 'id必须为整数',
                'type.in' => '类型必须为0'
            ]
        );
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage); 
        }
        $data = [
            'fcat_id'=>$requireData['fcat_id'],
            'website_id'=>Context::get("SiteId")
        ];
        if(isset($requireData['type'])){
            $data['type'] = $requireData['type'];
        }
        $result = $this->websiteServiceClient->getWebsiteFooterCategoryInfo($data);
        if ($result['code']!= ErrorCode::SUCCESS) {
            return Result::error($result['message'],0,[]); 
        }else{
            return Result::success($result['data']);
        }
    }
    /**
     * 搜索导航
     * @return array
     */
    public function selectWebsiteCategory()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'cityid' => 'nullable|numeric',
                'department_id' => 'nullable|numeric',
            ], 
            [
                'cityid.numeric' => '城市id必须为数字',
                'department_id.numeric' => '部门id必须为数字' 
            ]
        ) ;
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $data = $requireData;
        $data['website_id'] = Context::get("SiteId");
        $result = $this->newsServiceClient->selectWebsiteArticle($data);
        if ($result['code']!= ErrorCode::SUCCESS) {
            return Result::error($result['message'],0,[]); 
        }else{
            return Result::success($result['data']);
        }

    }
    /**
     * 搜索栏目的seo信息
     * @return array
     */
    public function getWebsiteCategoryHead()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'catid' =>'required|integer'
            ], 
            [
                'catid.required' => 'id不能为空'
            ]
        ) ;
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $data = $requireData;
        $data['website_id'] = Context::get("SiteId");
        $result = $this->websiteServiceClient->getWebsiteCategoryHead($data);
        if ($result['code']!= ErrorCode::SUCCESS) {
            return Result::error($result['message'],0,[]); 
        }else{
            return Result::success($result['data']);
         }

    }
    /**
     * 搜索某个导航
     * @return array
     */
    public function getOneWebsiteCategory()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'catid' =>'required|integer'
            ], 
            [
                'catid.required' => 'catid不能为空'
            ]
        ) ;
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $data = [
            'category_id' => $requireData['catid'],
            'website_id' => Context::get("SiteId")
        ];
        $result = $this->websiteServiceClient->getOneWebsiteCategory($data);
        if ($result['code']!= ErrorCode::SUCCESS) {
            return Result::error($result['message'],0,[]); 
        }else{
            return Result::success($result['data']);
         }

    }
    /**
     * 获取网站调查问卷
     */
    public function getWebsiteSurvey()
    {
        $requireData = $this->request->all();
        if(isset($requireData['art_id'])){
            $validator = $this->validationFactory->make(
                $requireData,
                [
                    'art_id' =>'required|integer'
                ],
                [
                    'art_id.required' => 'id不能为空',
                    'art_id.integer' => 'id必须为整数'
                ]
            ); 
            if ($validator->fails()){
                $errorMessage = $validator->errors()->first();
                return Result::error($errorMessage);
            }
            $data['art_id'] = $requireData['art_id'];
        }
        $data['website_id'] =  Context::get("SiteId");
        // return Result::success($data);
        $result = $this->newsServiceClient->getWebsiteSurvey($data);
        if ($result['code']!= ErrorCode::SUCCESS) {
            return Result::error($result['message'],0,[]);
        }else{
            return Result::success($result['data']);
        }

    }
    /*
     * 添加网站调查问卷选项
     * 
     * */
    public function addWebsiteSurveyOption()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'sur_id' =>'required',
                'choice_name' =>'required|string|max:30',
            ],
            [
                'sur_id.required' => '问卷id不能为空',
                'choice_name.required' => '选项名称不能为空',
                'choice_name.string' => '选项名称必须为字符串',
                'choice_name.max' => '选项名称不能超过30个字符',
            ]
        );
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $data = [
            'website_id' => Context::get("SiteId"),
            'sur_id' => $requireData['sur_id'],
            'choice_name' => $requireData['choice_name'],
        ];
        $result = $this->newsServiceClient->addWebsiteSurveyOption($data);
        if ($result['code']!= ErrorCode::SUCCESS) {
            return Result::error($result['message'],0,[]);
        }else{
            return Result::success($result['data']);
        }
    }
    /*
     * 调查问卷-投票
     * 
     * */
    public function addWebsiteSurveyVote()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'sur_id' =>'required',
                'choice_id' =>'required',
            ],
            [
                'sur_id.required' => '问卷id不能为空',
                'choice_id.required' => '选项名称不能为空'
            ]
        );
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $data = [
            'website_id' => Context::get("SiteId"),
            'sur_id' => $requireData['sur_id'],
            'choice_id' => $requireData['choice_id']
        ];
        // return Result::success($data);
        $result = $this->newsServiceClient->addWebsiteSurveyVote($data);
        if ($result['code']!= ErrorCode::SUCCESS) {
            return Result::error($result['message'],0,[]);
        }else{
            return Result::success($result['data']);
        }
    }
    /**
     * 获取父级/子级导航----路由
     * @return array
     */
    public function getWebsiteParentCategory()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' =>'required|integer'
            ], 
            [
                'id.required' => 'id不能为空'
            ]
        ) ;
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['website_id'] =  Context::get("SiteId");
        $result = $this->websiteServiceClient->getWebsiteParentCategory($requireData);
        if ($result['code']!= ErrorCode::SUCCESS) {
            return Result::error($result['message'],0,[]); 
        }else{
            return Result::success($result['data']);
         }

    }
    /**
     * 获取网站模块新闻----图文
     * @return array
     */
    public function getWebsiteCatidArticle()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'catid' =>'required|integer'
            ],
            [
                'catid.required' => 'id不能为空' 
            ] 
        );
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage); 
        }
        $requireData['website_id'] =  Context::get("SiteId");
        // return Result::success($requireData);
        $result = $this->newsServiceClient->getWebsiteCatidArticle($requireData);
        return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
    }
    /*
     * 获取底部所有信息
     * 
     * */
    public function getWebsiteFootAll()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'link_textnum' => 'required|integer',
                'link_imgnum' => 'required|integer',
                'link_footnum' => 'required|integer',
            ],
            [
                'link_textnum.required' => '文字类型友情链接数量不能为空',
                'link_textnum.integer' => '文字类型友情链接数量必须为整数',
                'link_imgnum.required' => '图片类型友情链接数量不能为空',
                'link_imgnum.integer' => '图片类型友情链接数量必须为整数',
                'link_footnum.required' => '底部友情链接数量不能为空',
                'link_footnum.integer' => '底部友情链接数量必须为整数',
            ] 
        );
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage); 
        }
        $requireData['website_id'] =  Context::get("SiteId");
        $result = $this->websiteServiceClient->getWebsiteFootAll($requireData);
        return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
    }
    /*
     * 获取网站顶部信息
     * 
     * */
    public function getWebsiteHead()
    {
        $data = [
            'website_id'=>Context::get("SiteId")
        ];
        $result = $this->websiteServiceClient->getWebsiteHead($data);
        return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
    }
    /*
     * 获取网站底部信息
     *
     * */
    public function getWebsiteAllArticle()
    {
        $requireData = $this->request->all();
        $requireData['website_id'] =  Context::get("SiteId");
        $result = $this->newsServiceClient->getWebsiteAllArticle($requireData);
        return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
    }
    /*
     * 乡村网-获取特殊新闻模块
     *
     * */
    public function getWebsiteArticles()
    {
        $requireData = $this->request->all();
        $requireData['website_id'] =  Context::get("SiteId");
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' =>'required',
            ],
            [
                'id.required' => 'id不能为空',
            ] 
        );
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $result = $this->newsServiceClient->getWebsiteArticles($requireData);
        return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
    }
}