<?php

namespace App\Http\Controllers\Web\Content;

use App\Http\Controllers\Web\WebBaseController;
use App\Services\Common\HotWordService;
use App\Services\Content\ArticleService;
use App\Services\Content\ArticleCategoryService;
use App\Services\Content\AdService;
use App\Services\Content\NavigationService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Collection;


class ArticleController extends WebBaseController
{
    protected $articleService;
    protected $articleCategoryService;
    protected $adService;
    protected $navigationService;
    protected $hotWordService;

    /**
     * ArticleController constructor.
     * @param $articleService
     * @param $articleCategoryService
     */
    public function __construct(ArticleService $articleService, ArticleCategoryService $articleCategoryService, AdService $adService, NavigationService $navigationService, HotWordService $hotWordService)
    {
        $this->articleService         = $articleService;
        $this->articleCategoryService = $articleCategoryService;
        $this->adService              = $adService;
        $this->navigationService      = $navigationService;
        $this->hotWordService         = $hotWordService;
    }

    public function index(Request $request, $id = '57', $num = '8', $focus = '3', $recommend = '4', $other_num = '5')
    {
        $key       = $request->input('key');
        $categorys = $this->articleCategoryService->getChildCategorys($id, $num);
        if (!$categorys->isEmpty()) {
            $search_id          = $categorys[0]->id;
            $search_where       = [];
            $search_where['id'] = $search_id;
            if ($id != '1') {
                $search_where['parent_id'] = $id;
            }
            if ($num != '8') {
                $search_where['num'] = $num;
            }
            if ($focus != '3') {
                $search_where['focus'] = $focus;
            }
            if ($recommend != '4') {
                $search_where['recommend'] = $recommend;
            }
            if ($other_num != '5') {
                $search_where['other_num'] = $other_num;
            }
            return redirect()->route('news.list', $search_where);
        } else {
            $rst = $this->articleService->list($key, '', 10);
        }

        $focus_articles     = $this->articleService->getPropertyArticles($focus, $other_num); //热门资讯
        $recommend_articles = $this->articleService->getPropertyArticles($recommend, $other_num); //推荐资讯
        //顶部广告位
        $ad_data = [
            'theme' => 'default',
            'org'   => 'Home',
            'alias' => 'AIX_news_index_top',
            'num'   => '1',
        ];
        $top_ads = $this->adService->getAds($ad_data);

        $return_data = [
            'articles'           => $rst,
            'categorys'          => $categorys,
            'focus_articles'     => $focus_articles,
            'recommend_articles' => $recommend_articles,
            'key'                => $key,
            'top_ads'            => $top_ads,
        ];
        return view('app.content.article.index', $return_data);
    }

    public function list(Request $request, $id, $parent_id = '1', $num = '8', $focus = '3', $recommend = '4', $other_num = '5')
    {
        $key                = $request->input('key');
        $info               = $this->articleCategoryService->getInfo($id);
        $lists              = $this->articleService->list($key, $id, '10');
        $categorys          = $this->articleCategoryService->getChildCategorys($info['parent_id'], $num);
        $categorys_child    = $this->articleCategoryService->getChildCategorys($id, 10);
        $focus_articles     = $this->articleService->getPropertyArticles($focus, $other_num); //热门资讯
        $recommend_articles = $this->articleService->getPropertyArticles($recommend, $other_num); //推荐资讯
        $bread              = $this->articleCategoryService->getBread($info['id']);

        //搜索关键字
        if ($key) {
            $this->hotWordService->searchHostWords($key, 4);
        }

        //获取后台职场资讯名称
        $where        = [
            'alias'     => 'AIX_top',
            'pagealias' => 'AIX_news',
            'display'   => '1',
        ];
        $topNav       = $this->navigationService->getTopNav($where);
        $now_cate     = '';
        $article_cate = [];
        foreach ($categorys as $k => $v) {
            if ($v->id == $id) {
                $now_cate     = $v->category_name;
                $article_cate = $v;
            }
        }
        $this->putSeoData('article_cate', $article_cate);

        //热词
        $hotWords = $this->hotWordService->getHotWords(['type' => 4], 'list_order desc,w_hot desc', 10);    //热门关键词

        $return_data = [
            'articles'           => $lists,
            'categorys'          => $categorys,
            'focus_articles'     => $focus_articles,
            'recommend_articles' => $recommend_articles,
            'key'                => $key,
            'type_id'            => $id,
            'top_nav'            => $topNav,
            'now_cate'           => $now_cate,
            'categorys_child'    => $categorys_child,
            'bread'              => $bread,
            'hotwords'           => $hotWords,
        ];

        return view('app.content.article.list', $return_data);
    }

    public function show($id, $parent_id = '1', $num = '8', $focus = '3', $recommend = '4', $other_num = '5')
    {
        $categorys          = $this->articleCategoryService->getChildCategorys($parent_id, $num);
        $focus_articles     = $this->articleService->getPropertyArticles($focus, $other_num); //热门资讯
        $recommend_articles = $this->articleService->getPropertyArticles($recommend, $other_num); //推荐资讯

        $article_info = $this->articleService->getArticleInfo($id);
        if (!$article_info) {
            $back_url = \Illuminate\Support\Facades\URL::previous();
            return $this->showMessage('资讯不存在', $back_url, true, '上一页', '3');
        }

        $this->putSeoData('article', $article_info);

        $return_data = [
            'categorys'          => $categorys,
            'focus_articles'     => $focus_articles,
            'recommend_articles' => $recommend_articles,
            'type_id'            => $id,
            'info'               => $article_info,
            'parent_id'          => $parent_id,
        ];

        return view('app.content.article.show', $return_data);
    }

    public function click($id)
    {
        $rst  = $this->articleService->incrementData(['id' => $id], 1, 'click');
        $data = ['status' => 0];
        if ($rst) {
            $data = ['status' => 1];
        }
        return response()->json($data);
    }
}