<?php

namespace App\JsonRpc;

use App\Model\FooterCategory;
use App\Model\Website;
use App\Model\FooterContent;
use App\Model\Web;
use Hyperf\RpcServer\Annotation\RpcService;
use App\Tools\Result;
use Hyperf\DbConnection\Db;

#[RpcService(name: "FooterService", protocol: "jsonrpc-http", server: "jsonrpc-http")]
class FooterService implements FooterServiceInterface
{
    /**
     * 获取底部导航
     * @param array $data
     * @return array
     */
    public function getFooterCategory(array $data): array
    {
        $where = [];
        if(isset($data['website_name'])){
            array_push($where, ['website.website_name','like','%'.$data['website_name'].'%']);
        }
        if(isset($data['name'])){
            array_push($where, ['footer_category.name','like','%'.$data['name'].'%']);
        }
        $query = FooterCategory::when(!empty($where), function ($query) use ($where) {
            $query->where($where);
        });
        $rep = $query->leftJoin("website","website.id","footer_category.website_id")
        ->select("footer_category.*","website.website_name","website.id as website_id")
        ->limit($data['pageSize'])->offset(($data['page']-1)*$data['pageSize'])->orderBy("updated_at","desc")
        ->get();
        $count = $query->count();
        // var_dump($where);
        $result  = [];
        $result = [
            'rows'=>$rep,
            'count'=>$count
        ];
        if($count == 0){
            return Result::error("没有查到相关数据！");
        }
        return Result::success($result);
    }
     /**
      * 添加底部导航
     * @param array $data
     * @return array
     */
    public function addFooterCategory(array $data): array
    {
        if(empty($data)){
            $result = Website::select('website_name','id')->get();
        }else{
            // 底部导航类型  0：内容型；1：列表型；
            $webid = Website::select('website_name','id')->where('id',$data['website_id'])->first();
            if(empty($webid)){
                return Result::error("该网站不存在！");
            }
            // 同一网站下的底部导航名称不能重复
            $name = FooterCategory::where('website_id',$data['website_id'])->where('name',$data['name'])->first();
            if(!empty($name)){
                return Result::error("该底部导航名称已存在！");
            }
            $result = FooterCategory::insertGetId($data); 
        }
        if(empty($result)){
            return Result::error("添加失败！");
        }else{
            return Result::success($result);
        }
    }
     /**
      * 修改底部导航
     * @param array $data
     * @return array
     */
    public function upFooterCategory(array $data): array
    {   
        $footer_category = FooterCategory::where('id', $data['id'])->first();
        if(empty($footer_category)) {
            return Result::error("该底部导航不存在！");
        }
        if(empty($data['website_id'])){
            $web = Website::select('website_name','id')->get();
            $footer_category = FooterCategory::where('footer_category.id',$data['id'])
            ->leftJoin("website","website.id","footer_category.website_id")
            ->select("footer_category.*","website.website_name","website.id as website_id")
            ->first();
            if(isset($data['name'])){
                $footer_category['name'] = $data['name'];
            }
            $result = [
                'rows'=>$footer_category,
                'web'=>$web
            ];
        }else{
            $all_categories = FooterCategory::where('website_id',$data['website_id'])->pluck('name')->toArray();
            // 检查修改后的数据是否与已有数据重复
            if (in_array($data['name'], $all_categories)) {
                return Result::error("修改后的底部导航名称已存在！");
            }
            $webid = Website::where('id',$data['website_id'])->first();
            if(empty($webid)){
                return Result::error("该网站不存在！");
            }
            $result = FooterCategory::where('id', $data['id'])->update($data);
        }
        if (empty($result)) {
            return Result::error("修改失败！");
        }else{
            return Result::success($result);
        }
        
    }
    /**
     * 删除底部导航
     * @param array $data
     * @return array
     */
    public function delFooterCategory(array $data): array
    {
        Db::beginTransaction();
        try{
            $footer_category = FooterCategory::where('id', $data['id'])->first();
            if (!$footer_category) {
                return Result::error("该底部导航不存在！");
            }else{
                $result['footer_category'] = FooterCategory::where('id', $data['id'])->delete();
                $result['footer_content'] = FooterContent::where('fcat_id', $data['id'])->delete();
                // $result = FooterCategory::where('footer_category.id',$data['id'])
                // ->leftJoin("footer_content","footer_content.fcat_id","footer_category.id")
                // ->delete();
            }
            Db::commit();
        } catch(\Throwable $ex){
            Db::rollBack();
            var_dump($ex->getMessage());
            return Result::error("删除失败",0);
        }
        return Result::success($result);
    }
    /**
     * 添加底部导航（列表）内容
     * @param array $data
     * @return array
     */
    public function addFooterContent(array $data): array
    {
        // 底部导航类型    0：内容型；1：列表型；
        // var_dump($data);
       
        $cat = FooterCategory::where('id', $data['fcat_id'])->first();
        if (!$cat) {
            return Result::error("该底部导航不存在！");
        }
        if($cat['type'] != $data['type']){
            return Result::error("请输入正确的底部导航类型！");
        }
        if($cat['type'] == 0){
            $content = FooterContent::where('fcat_id', $data['fcat_id'])->first();
            if(!empty($content)){
                return Result::error("该底部导航已添加内容！");
            }
        }else{
            // return Result::success($data);
            if(!isset($data['list_title']) || empty($data['list_title'])){
                return Result::error("请输入底部导航列表标题！");
            }
            $content = FooterContent::where('fcat_id', $data['fcat_id'])->where('list_title',$data['list_title'])->first();
            if(!empty($content)){
                return Result::error("该列表标题已存在！");
            }
        }
        unset($data['type']);
        $result = FooterContent::insertGetId($data);
        if(empty($result)){
            return Result::error("添加失败！");
        }else{
            return Result::success($result);
        }
    }
     /**
     * 获取底部导航（列表）内容
     * @param array $data
     * @return array
     */
    public function getFooterContent(array $data): array
    {

        $where = [];
        array_push($where, ['fcat_id',$data['fcat_id']]);
        $type = FooterCategory::where('id', $data['fcat_id'])->value('type');
        if($type == 1){
            if(isset($data['list_title'])){
                array_push($where, ['list_title','like','%'.$data['list_title'].'%']);
            }
            if(isset($data['con_title'])){
                array_push($where, ['con_title','like','%'.$data['con_title'].'%']);
            }
        }
        $rep = FooterContent::where($where)
        ->leftJoin('footer_category','footer_category.id','fcat_id')
        ->select('footer_content.*','footer_category.type')
        ->limit($data['pageSize'])
        ->offset(($data['page']-1)*$data['pageSize'])
        ->orderBy("updated_at","desc")
        ->get();
        $count = FooterContent::where($where)->count();
        if($count == 0){
            return Result::error("没有查到相关数据！");
        }else{
            $result = [
                'rows'=>$rep,
                'count'=>$count
            ];
            return Result::success($result);
        }

    }
     /**
     * 获取某个底部导航（列表）内容
     * @param array $data
     * @return array
     */
    public function getOneFooterContent(array $data): array
    {      
        $result = FooterContent::where('footer_content.id', $data['id'])
        ->leftJoin('footer_category','footer_category.id','fcat_id')
        ->select('footer_content.*','footer_category.type')
        ->first();   
        if(empty($result)){
            return Result::error("请输入正确的底部导航内容id！");
        }else{
            return Result::success($result);
        }
    }
    /**
     * 编辑底部导航（列表）内容
     * @param array $data
     * @return array
     */
    public function upFooterContent(array $data): array
    {
        $content = FooterContent::where('footer_content.id', $data['id'])
        ->leftJoin('footer_category','footer_category.id','fcat_id')
        ->select('footer_content.*','footer_category.type','footer_category.id as fcat_id')
        ->first();
        if(!$content){
            return Result::error("该底部导航内容不存在！");
        }
        if($content['type'] != $data['type']){
            return Result::error("请输入正确的底部导航类型！");
        }
        if($content['type'] == 1){
            if(!isset($data['list_title']) || empty($data['list_title'])){
                return Result::error("请输入底部导航列表标题！");
            }
            $list_title = FooterContent::where('fcat_id', $data['fcat_id'])->where('list_title',$data['list_title'])->first();
            if(!empty($list_title)){
                return Result::error("该列表标题已存在！");
            }
        }
        unset($data['type']);            
        $result = FooterContent::where('id', $data['id'])->update($data);   
        if(empty($result)){
            return Result::error("修改失败！");
        }else{
            return Result::success($result);
        }
    }
    /**
     * 删除底部导航（列表）内容
     * @param array $data
     * @return array
     */
    public function delFooterContent(array $data): array
    {
        $result = FooterContent::where('id', $data['id'])->delete($data);  
        if(empty($result)){
            return Result::error("删除失败！");
        }else{
            return Result::success($result);
        }
    }

}