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

use App\JsonRpc\NewsServiceInterface;
use App\Tools\PublicData;
use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpServer\Annotation\AutoController;
use App\Tools\Result;
use Hyperf\Validation\Contract\ValidatorFactoryInterface;
use Hyperf\Context\Context;
use App\JsonRpc\UserServiceInterface;
use App\JsonRpc\WebsiteServiceInterface;
/**
 * Class NewsController
 * @package App\Controller
 */
//#[AutoController]
class NewsController extends AbstractController
{
    #[Inject]
    protected ValidatorFactoryInterface $validationFactory;

    /**
     * @var NewsServiceInterface
     */
    #[Inject]
    private $newsServiceClient;

    /**
     * @var UserServiceInterface
     */
    #[Inject]
    private $userServiceClient;
    /**
     * @var WebsiteServiceInterface
     */
    #[Inject]
    private $WebsiteServiceClient;


    /**
     * 导航池列表
     * @return void
     */
    public function getCategoryList()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'page'=> 'required',
                'pageSize'=> 'required',

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

            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $result = $this->newsServiceClient->getCategoryList($requireData);
        if($result['code'] == 200){
            return Result::success($result['data']);
        }
        return  Result::error($result['message']);
    }
    /**
     * 站点下的导航池
     * @return void
     */
    public function categoryList()
    {

        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'pid'=> 'required'
            ],
            [
                'pid.required' => '父级ID不能为空'
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }

        $requireData['website_id'] = Context::get("SiteId");
         //获取用户信息
         $user_id = Context::get("UserId");
         $userInfo = $this->userServiceClient->getUserInfo((int)$user_id);
         var_dump("用户信息:",$userInfo);
         $sszq = $userInfo['data']['sszq'];
         $type_id = $userInfo['data']['type_id']; //'1:个人会员 2:政务会员 3:企业会员 4:调研员 10000:管理员 20000:游客(小程序)'
         //管理员看所有
         if($type_id == 10000){
             $result = $this->newsServiceClient->categoryList($requireData);
        } else {
            $requireData['sszq'] = $sszq;
            $result = $this->newsServiceClient->myCategoryList($requireData);
        }
//        $rep = PublicData::buildMenuTree($result['data']);
        return $result ? Result::success($result['data']) : Result::error($result['message']);
    }

    /**
     * 添加导航
     * @return array|void
     */
    public function addCategory()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'name'=> 'required',
                'seo_title'=> 'required',
                'seo_keywords'=> 'required',
                'seo_description'=> 'required',
            ],
            [
                'name.required' => '导航池名称不能为空',
                'seo_title.required' => 'seo标题名称不能为空',
                'seo_keywords.required' => 'seo关键词不能为空',
                'seo_description.required' => 'seo描述不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }

        $requireData['pid'] = isset($requireData['pid_arr'])?end($requireData['pid_arr']):'';
        $requireData['pid_arr'] = isset($requireData['pid_arr'])?json_encode($requireData['pid_arr']):'';

        // $requireData['city_id'] = isset($requireData['city_arr_id'])?end($requireData['city_arr_id']):'';
        // $requireData['city_arr_id'] = isset($requireData['city_arr_id'])?json_encode($requireData['city_arr_id']):'';

        // $requireData['department_id'] = isset($requireData['department_arr_id'])?end($requireData['department_arr_id']):'';
        // $requireData['department_arr_id'] = isset($requireData['department_arr_id'])?json_encode($requireData['department_arr_id']):'';

        $result = $this->newsServiceClient->addCategory($requireData);
        return $result ? Result::success($result['data']) : Result::error($result['message']);
    }

    /**
     * 更新导航池
     * @return array
     */
    public function updateCategory()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id'=>'required',
                'name'=> 'required',
                'seo_title'=> 'required',
                'seo_keywords'=> 'required',
                'seo_description'=> 'required',
            ],
            [
                'id.required' =>'ID不能为空',
                'name.required' => '栏目池名称不能为空',
                'seo_title.required' => 'seo标题名称不能为空',
                'seo_keywords.required' => 'seo关键词不能为空',
                'seo_description.required' => 'seo描述不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['pid'] = isset($requireData['pid_arr'])?end($requireData['pid_arr']):'';
        $requireData['pid_arr'] = isset($requireData['pid_arr'])?json_encode($requireData['pid_arr']):'';

        // $requireData['city_id'] = isset($requireData['city_arr_id'])?end($requireData['city_arr_id']):'';
        // $requireData['city_arr_id'] = isset($requireData['city_arr_id'])?json_encode($requireData['city_arr_id']):'';

        // $requireData['department_id'] = isset($requireData['department_arr_id'])?end($requireData['department_arr_id']):'';
        // $requireData['department_arr_id'] = isset($requireData['department_arr_id'])?json_encode($requireData['department_arr_id']):'';

        $result = $this->newsServiceClient->updateCategory($requireData);
        return $result['code']==200? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 删除分类
     * @return array
     */
    public function delCategory()
    {
        $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->newsServiceClient->delCategory($requireData);
        return $result['code']==200 ? Result::success($result['data']) : Result::error($result['message']);
    }

    /**
     * 资讯列表
     * @return void
     */
    public function getArticleList()
    {
        $requireData = $this->request->all();

        $validator = $this->validationFactory->make(
            $requireData,
            [
                'page'=> 'required',
                'pageSize'=> 'required',

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

            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['website_id'] = Context::get("SiteId");
        //获取用户信息
        $user_id = Context::get("UserId");
        $userInfo = $this->userServiceClient->getUserInfo((int)$user_id);
        var_dump("用户信息:",$userInfo);
        $sszq = $userInfo['data']['sszq'];
        //获取websiteid
        // $groupInfo = $this->WebsiteServiceClient->getWebsiteGroupInfo(['id' => $sszq]);
        // var_dump("groupInfo:",$groupInfo);
        // $sszqstr = implode(',',json_decode($groupInfo['data']['web_ids']));

        $type_id = $userInfo['data']['type_id']; //'1:个人会员 2:政务会员 3:企业会员 4:调研员 10000:管理员 20000:游客(小程序)'
        $requireData['type_id'] = $type_id;
        $requireData['user_id'] = $user_id;


        var_dump("资讯:",$requireData);
        $result = $this->newsServiceClient->getArticleList($requireData);
        //1通过,2待审核,3待发 4,拒绝 5删除
        $statusList = [
            '0'=>'待审核',
            '1'=>'已发布',
            '2'=>'待审核',
            '3'=>'待发',
            '4'=>'拒绝',
            '5'=>'删除',
        ];
        if($result['data']){
            foreach ($result['data']['rows'] as $k=>$v) {
                $result['data']['rows'][$k]['cat_arr_id'] = $v['cat_arr_id']?json_decode($v['cat_arr_id']):[0];
                $result['data']['rows'][$k]['tag'] = $v['tag']?json_decode($v['tag']):[];
                $result['data']['rows'][$k]['status_name'] = $statusList[$v['status']];
                $result['data']['rows'][$k]['level'] = (string)$v['level'];
                $result['data']['rows'][$k]['islink'] = isset($v['islink']) && $v['islink']>0?true:false;
            }
        }
        // $result = $this->newsServiceClient->getArticleList($requireData);

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

    /**
     * 获取导航池信息
     * @return void
     */
    public function getCategoryInfo()
    {
        $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->newsServiceClient->getCategoryInfo($requireData);
        return $result['code']==200 ? Result::success($result['data']) : Result::error($result['message']);
    }

    /**
     * 添加分类
     * @return array|void
     */
    public function addArticle()
    {
        // $a = ['asdlk1', '2342345234', [1, '222222222222']];
        // var_dump(json_encode($a));
        // return '222';
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'title'=> 'required',
                'cat_arr_id'=> 'required',
                'author'=> 'required',

            ],
            [
                'title.required' => '标题不能为空',
                'cat_arr_id.required' => '导航池ID不能为空',
                'author.required' => '作者不能为空',
            ]
        );
        if ($validator->fails()){
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['catid'] = isset($requireData['cat_arr_id'])?end($requireData['cat_arr_id']):'';
        $requireData['cat_arr_id'] = isset($requireData['cat_arr_id'])?json_encode($requireData['cat_arr_id']):'';

        $loginIp = $this->request->getHeader('x-forwarded-for')[0] ?? $this->request->getHeader('x-real-ip')[0] ?? $this->request->getServerParams()['remote_addr'] ?? '0.0.0.0';
        $requireData['ip'] = $loginIp;

//        $requireData['website_id'] = Context::get("SiteId");
        $requireData['admin_user_id'] =Context::get("UserId");
        
        $requireData['level'] = isset($requireData['level']) &&  $requireData['level']?$requireData['level']:0;
        $requireData['hits'] = isset($requireData['hits']) &&  $requireData['hits']?$requireData['hits']:0;
        $requireData['is_original'] = isset($requireData['is_original']) &&  $requireData['is_original']?$requireData['is_original']:0;
        $requireData['status'] = isset($requireData['status']) &&  $requireData['status']?$requireData['status']:0;
//        var_dump("入参:",$requireData);
        $result = $this->newsServiceClient->addArticle($requireData);

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

    /**
     * 更新资讯
     * @return array
     */
    public function updateArticle()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id'=>'required',
                'title'=> 'required',
                'cat_arr_id'=> 'required',
                'author'=> 'required',
            ],
            [
                'title.required' => '标题不能为空',
                'cat_arr_id.required' => '导航池ID不能为空',
                'author.required' => '作者不能为空',
                'id.required' =>'ID不能为空'
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }

        $requireData['catid'] = isset($requireData['cat_arr_id'])?end($requireData['cat_arr_id']):'';
        $requireData['cat_arr_id'] = isset($requireData['cat_arr_id'])?json_encode($requireData['cat_arr_id']):'';

        $result = $this->newsServiceClient->updateArticle($requireData);
        return $result['code']==200? Result::success($result['data']) : Result::error($result['message']);
    }

    /**
     * 更新资讯状态
     * @return array
     */
    public function upArticleStatus()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id'=>'required',
                'status'=> 'required',
            ],
            [
                'id.required' => 'id不能为空',
                'status.required' => '状态不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $result = $this->newsServiceClient->upArticleStatus($requireData);
        return $result['code']==200? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 删除分类
     * @return array
     */
    public function delArticle()
    {
        $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);
        }

//        $requireData['website_id'] = Context::get("SiteId");
        $result = $this->newsServiceClient->delArticle($requireData);
        return $result['code']==200 ? Result::success($result['data']) : Result::error($result['message']);
    }

    /**
     * 获取资讯信息
     * @return array
     */
    public function  getArticleInfo()
    {
        $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->newsServiceClient->getArticleInfo($requireData);
        if($result['code']==0){
             return Result::error($result['message']);
        }
        $result['data']['cat_arr_id'] =  $result['data']['cat_arr_id']?json_decode($result['data']['cat_arr_id']):[];
        return $result['code']==200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 获取调查问卷列表
     * @return array
     */
    public function getSurveyList()
    {
        $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->newsServiceClient->getSurveyList($requireData);
        return $result['code']==200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 获取调查问卷详情
     * @return array
     */
    public function getSurveyInfo()
    {
        $requireData = $this->request->all(); 
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'sur_id'=>'required'
            ], 
            [
               'sur_id.required' => 'sur_id不能为空', 
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage); 
        }
        $result = $this->newsServiceClient->getSurveyInfo($requireData);
        return $result['code']==200? Result::success($result['data']) : Result::error($result['message']);
    }    /**
     * 检测导航池名称是否存在
     * @return array
     */
    public function  checkCategoryName()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'name'=> 'required',
            ],
            [
                'name.required' => 'name不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }

        $result = $this->newsServiceClient->checkCategoryName($requireData);
        return $result['code']==200 ? Result::success($result['data']) : Result::error($result['message']);
    }

     //20250226  产品列表
     public function getGoodList(){
         $requireData = $this->request->all();
         $validator = $this->validationFactory->make(
             $requireData,
             [
                 'page'=> 'integer|required',
                 'page_size'=> 'integer|required',
             ],
             [
                 'page.integer' => 'page必须是整型',
                 'page_size.integer' => 'page_size必须是整型',
                 'page.required' => 'page不能为空',
                 'page_size.required' => 'page_size不能为空',
                
             ]
         );
         $user_id = Context::get("UserId");
         $userInfo = $this->userServiceClient->getUserInfo((int)$user_id);
         var_dump("用户信息:",$userInfo);
         $type_id = $userInfo['data']['type_id']; //'1:个人会员 2:政务会员 3:企业会员 4:调研员 10000:管理员 20000:游客(小程序)'
         $requireData['type_id'] = $type_id;
         $requireData['user_id'] = $user_id;

         if ($validator->fails()) {
             $errorMessage = $validator->errors()->first();
             return Result::error($errorMessage);
         }
         $result = $this->newsServiceClient->getGoodList($requireData);
         return $result['code']==200 ? Result::success($result['data']) : Result::error($result['message']);
     }
     public function getGoodInfo(){
         $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->newsServiceClient->getGoodInfo($requireData);
         return $result['code']==200 ? Result::success($result['data']) : Result::error($result['message']);
         }
     public function updateGood(){
         $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->newsServiceClient->updateGood($requireData);
         return $result['code']==200 ? Result::success($result['data']) : Result::error($result['message']
         );
         }
     public function addGood(){
         $requireData = $this->request->all();
         $validator = $this->validationFactory->make(
             $requireData,
             [
                 'name'=> 'required',
                //  'price'=> 'numeric',
                //  'min'=> 'numeric',
                //  'max'=> 'numeric',
                //  'hits  '=> 'numeric',
             ],
             [
                 'name.required' => '产品名称不能为空',
                //  'price.required' => '产品价格不能为空',
                //  'price.numeric' => '价格必须是数字',
                //  'min.numeric' => 'min必须是数字',
                //  'max.numeric' => 'max须是数字',
                //  'hits.numeric' => '点击量必须是数字',
          
             ]
         );
         if ($validator->fails()) {
             $errorMessage = $validator->errors()->first();
             return Result::error($errorMessage);
         }
         $requireData['user_id'] = context::get("UserId");
         $result = $this->newsServiceClient->addGood($requireData);
         return $result['code']==200 ? Result::success($result['data']) : Result::error($result['message']);
         }
     public function delGood(){
         $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->newsServiceClient->delGood($requireData);
         return $result['code']==200 ? Result::success($result['data']) : Result::error($result['message']);
     }

    //20250226  产品列表
    //20250306  求职
     public function getJobHuntingList(){
         $requireData = $this->request->all();
         $validator = $this->validationFactory->make($requireData,
             [
                 'page'=> 'required',
                 'page_size'=> 'required',
             ],
             [
                 'page.required' => 'page不能为空',
                 'page_size.required' => 'page_size不能为空',
             ]
         ); if ($validator->fails()) {
             $errorMessage = $validator->errors()->first();
             return Result::error($errorMessage);
         }
         $user_id = Context::get("UserId");
         $userInfo = $this->userServiceClient->getUserInfo((int)$user_id);
         $type_id = $userInfo['data']['type_id']; //'1:个人会员 2:政务会员 3:企业会员 4:调研员 10000:管理员 20000:游客(小程序)'
         $requireData['type_id'] = $type_id;
         $requireData['user_id'] = $user_id;
         $result = $this->newsServiceClient->getJobHuntingList($requireData);
         return $result['code']==200 ? Result::success($result['data']) : Result::error($result['message']);
     }
     public function getJobHuntingInfo(){
         $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->newsServiceClient->getJobHuntingInfo($requireData);
         return $result['code']==200 ? Result::success($result['data']) : Result::error($result['message']);
     }
     public function updateJobHunting(){
         $requireData = $this->request->all();
         $validator = $this->validationFactory->make($requireData,  
         [
            'name'=> 'required',
            'sexy'=> 'required',
        ],
        [
            'name.required' => '姓名不能为空',
            'sexy.required' => '性别不能为空',
        ]
         ); if ($validator->fails()) {
             $errorMessage = $validator->errors()->first();
             return Result::error($errorMessage);
         }
         $result = $this->newsServiceClient->updateJobHunting($requireData);
         return $result['code']==200 ? Result::success($result['data']) : Result::error($result['message']);
     }
     public function addJobHunting(){
        
         $requireData = $this->request->all();
         $validator = $this->validationFactory->make($requireData,
             [
                 'name'=> 'required',
                 'sexy'=> 'required',
             ],
             [
                 'name.required' => '姓名不能为空',
                 'sexy.required' => '性别不能为空',
             ]
         ); 
         if ($validator->fails()) {
             $errorMessage = $validator->errors()->first();
             return Result::error($errorMessage);
         }
         $requireData['user_id'] = context::get("UserId");
         $result = $this->newsServiceClient->addJobHunting($requireData);
         return $result['code']==200 ? Result::success($result['data']) : Result::error($result['message']);
     }
     public function delJobHunting(){
         $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->newsServiceClient->delJobHunting($requireData);
         return $result['code']==200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    public function getJobHuntingData(){
         $requireData = $this->request->all();
         $result = $this->newsServiceClient->getJobHuntingData($requireData);
         return $result['code']==200 ? Result::success($result['data']) : Result::error($result['message']);
     }
    //20250306  求职
    //20250324  通知,公告,消息
     public function getMSG(){
         $requireData = $this->request->all();
         $validator = $this->validationFactory->make($requireData,
             [
                  
             ],
             [
                
             ]
         ); if ($validator->fails()) {
             $errorMessage = $validator->errors()->first();
             return Result::error($errorMessage);
         }
         $user_id = Context::get("UserId");
         $userInfo = $this->userServiceClient->getUserInfo((int)$user_id);
         if($userInfo['code']!=200){
             return Result::error($userInfo['message']);
         }
         $requireData['user_id'] = $user_id;
         $requireData['type_id'] = $userInfo['data']['type_id'];
         $result = $this->newsServiceClient->getMSG($requireData);
         return $result['code']==200 ? Result::success($result['data']) : Result::error($result['message']);
     }
     
    //20250324  通知,公告,消息
}