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

namespace App\Http\Controllers\Topic;

use App\Repositories\CategoryRepository;
use App\Transformers\CategoryTransformer;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use App\Transformers\DetailCategoryTransformer;
use League\Fractal\Manager;
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection;
use League\Fractal\Resource\Item;
use App\Http\Controllers\Controller;

class CategoryController extends Controller {

    public function __construct(CategoryRepository $categoryRepository)
    {
        $this->categroupRepository = $categoryRepository;
    }
    //创建
    public function create(Request $request){
      $validator = Validator::make($request->all(), [
          'name' => 'required|string|max:12',
          'img' => 'required|url',
          'desc' => 'required|string|max:100',
          'topic_ids' => 'string',
      ]);
      if ($validator->fails()) {
          return $this->response->error($validator->errors()->first(), 500);
      }
      return  $this->categroupRepository->create($request->all());
    }
    //创建
    public function edit(Request $request){
        $validator = Validator::make($request->all(), [
            'id'=>'required|integer|max:12',
            'name' => 'required|string|max:12',
            'img' => 'required|url',
            'desc' => 'required|string|max:100',
            'topic_ids' => 'string',
        ]);
        if ($validator->fails()) {
            return $this->response->error($validator->errors()->first(), 500);
        }
        return  $this->categroupRepository->edit($request->all());
    }
    //列表
    public function index(Request $request){
        $categroup = $this->categroupRepository->index($request->all());
        $fractal = new Manager();
        $resource = new Collection($categroup, new CategoryTransformer());
        $resource->setPaginator(new IlluminatePaginatorAdapter($categroup));
        $data = $fractal->createData($resource)->toArray();
        $data['extra'] = [
            'filters' => [
                'name',
            ],
            'columns' => [
                'id',
                'name',
                'img',
                'created_at',
                'is_suggest',
                'topic_count'
            ]
        ];
        return $data;
    }
    public function view(Request $request){
        $data = $request->only('id');
        $validator = Validator::make($data, [
            'id' => 'required|integer|max:12',
        ]);
        if ($validator->fails()) {
            return $this->response->error($validator->errors()->first(), 500);
        }
        $categroup = $this->categroupRepository->view($data);
        return $this->response->item($categroup, new DetailCategoryTransformer());
    }
    //设置推荐
    public function isSuggest(Request $request){
        $data = $request->only('id','is_suggest');
        $validator = Validator::make($data, [
            'id' => 'required|integer|max:12',
            'is_suggest' => ['required',Rule::in(0, 1)],
        ]);
        if ($validator->fails()) {
            return $this->response->error($validator->errors()->first(), 500);
        }
        return  $this->categroupRepository->update($data);
    }
}