<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019-06-10
 * Time: 18:09
 */

namespace App\Http\Controllers\Topic;

use App\Models\Topic;
use App\Repositories\CategoryRepository;
use App\Repositories\TopicRepository;
use App\Transformers\DetailTopicTransformer;
use App\Transformers\TopicTransformer;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use League\Fractal\Manager;
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection;
use League\Fractal\Resource\Item;
use Illuminate\Validation\Rule;
use App\Http\Controllers\Controller;



class TopicController extends Controller {

    public function __construct(CategoryRepository $categoryRepository,TopicRepository $topicRepository)
    {
        $this->categroupRepository = $categoryRepository;
        $this->topicRepository = $topicRepository;
    }
    //列表
    public function index(Request $request){
        $topic= $this->topicRepository->index($request->all());
        $fractal = new Manager();
        $resource = new Collection($topic, new TopicTransformer());
        $resource->setPaginator(new IlluminatePaginatorAdapter($topic));
        $data = $fractal->createData($resource)->toArray();
        $data['extra'] = [
            'filters' => [
                'name',
                'topic_status',
            ],
            'columns' => [
                'id',
                'name',
                'category_list',
                'img',
                'post_count',
                'follow_count',
                'page_count',
                'created_at',
                'is_suggest',
                'is_hot',
                'is_open',
            ]
        ];
        return $data;
    }
    //详情
    public function view(Request $request){
        $validator = Validator::make($request->all(), [
            'id' => 'required|integer',
        ]);
        if ($validator->fails()) {
            return $this->response->error($validator->errors()->first(), 500);
        }
        $topic = $this->topicRepository->view($request->all());
        return $this->response->item($topic, new DetailTopicTransformer());
    }
    //添加
    public function create(Request $request){
        $validator = Validator::make($request->all(), [
            'name' => 'required|string|max:10',
            'img' => 'required|url',
            'desc' => 'required|string|max:100',
            'category_ids' => 'required|string',
            'base_count' => 'min:0|max:10000',
        ]);
        if ($validator->fails()) {
            return $this->response->error($validator->errors()->first(), 500);
        }
        return  $this->topicRepository->create($request->all());
    }
    //编辑
    public function edit(Request $request){
        $validator = Validator::make($request->all(), [
            'id'=>'integer|required',
            'name' => 'required|string|max:10',
            'img' => 'required|url',
            'desc' => 'required|string|max:100',
            'category_ids' => 'required|string',
            'base_count' => 'min:0|max:10000',
        ]);
        if ($validator->fails()) {
            return $this->response->error($validator->errors()->first(), 500);
        }
        return  $this->topicRepository->edit($request->all());
    }
    //开启
    public function isOpen(Request $request) {
        $validator = Validator::make($request->all(), [
            'id' => 'integer|required',
            'is_open' => ['required', Rule::in(0, 1)]
        ]);
        if ($validator->fails()) {
            return $this->response->error($validator->errors()->first(), 500);
        }
        return  $this->topicRepository->update($request->all());
    }
    //开启
    public function setStatus(Request $request) {
        $validator = Validator::make($request->all(), [
            'id' => 'integer|required',
            'type'=>['required', Rule::in(1, 2)],
            'status' => ['required', Rule::in(0, 1)],
        ]);
        if ($validator->fails()) {
            return $this->response->error($validator->errors()->first(), 500);
        }
        return  $this->topicRepository->update($request->all());
    }
    //获取多个话题
    public function getTopic(Request $request){
        $validator = Validator::make($request->all(), [
            'ids' => 'required',
        ]);
        if ($validator->fails()) {
            return $this->response->error($validator->errors()->first(), 500);
        }
        return  $this->topicRepository->getTopics($request['ids']);
    }

    /**
     * 重置话题redis
     */
    public function resetRedis(){
        return  $this->topicRepository->resetRedis();
    }
    public function getMemberTopic(Request $request){
        $validator = Validator::make($request->all(), [
            'uid' => 'required',
        ]);
        if ($validator->fails()) {
            return $this->response->error($validator->errors()->first(), 500);
        }
        return  $this->topicRepository->getMemberTopics($request['uid']);
    }
}