<?php

namespace App\Http\Controllers\QuickApp\User;

use App\Consts\SysConsts;
use Illuminate\Http\Request;
use App\Http\Controllers\QuickApp\BaseController;
use App\Modules\Book\Services\BookConfigService;
use App\Modules\Book\Services\UserShelfBooksService;
use App\Http\Controllers\QuickApp\User\Transformers\ReadRecordTransformer;
use App\Modules\Book\Services\BookService;
use App\Modules\ShareFree\Services\ShareUsersService;
use App\Modules\User\Services\ReadRecordService;
use Redis;

class ReadRecordController extends BaseController
{

    /**
     * @apiDefine ReadRecord 阅读记录
     */



    /**
     * @apiVersion 1.0.0
     * @apiDescription 获取阅读记录
     * @api {get} readrecord 获取阅读记录
     * @apiHeader {String} [Authorization]  token 
     * @apiGroup ReadRecord
     * @apiName index
     * @apiSuccess {int}         code 状态码
     * @apiSuccess {String}      msg  信息
     * @apiSuccess {object}      data 结果集
     * @apiSuccess {Int}         data.book_name    书名
     * @apiSuccess {String}      data.chapter_name  章节名
     * @apiSuccess {Int}         data.bid   bid
     * @apiSuccess {Int}         data.time   时间
     * @apiSuccess {Int}         data.cid    章节id
     * @apiSuccess {Int}         data.chapter_name    章节名
     * @apiSuccess {Int}         data.cover    封面
     * @apiSuccess {Int}         data.last_chapter    最后一张
     * @apiSuccessExample {json} Success-Response:
     *     HTTP/1.1 200 OK
     *     {
     *       code: 0,
     *       msg: "",
     *       data:[
     *           {
     *               book_name: "我来好好爱你",
     *               bid: 2,
     *               cid: 10402,
     *               time: 1511783120,
     *               chapter_name: "你言重了"
     *           },
     *           {
     *               book_name: "京华烟云",
     *               bid: 1,
     *               cid: 4,
     *               time: 1511783068,
     *               chapter_name: "背水一战"
     *           }
     *           ]
     */
    public function index(Request $request)
    {
        $user = $this->user_info;
        $is_check_from_db = (time() - strtotime($user->created_at) > 5 * 30 * SysConsts::ONE_DAY_SECONDS);
        $res = ReadRecordService::getReadRecord($this->uid, $is_check_from_db);
        if ($res) {
            $id_arr = [];
            foreach ($res as $key => $value) {
                $id_arr[] = $value['bid'];
            }

            $book = BookConfigService::getBooksByIds($id_arr);
            foreach ($res as $key => &$value) {
                $value['cover'] = '';
                $value['last_chapter'] = 0;
                foreach ($book as  $val) {
                    if ($value['bid'] == $val->bid) {
                        $value['cover'] = $val->cover;
                        $value['last_chapter'] = $val->last_chapter;
                        break;
                    }
                }
            }

            $shelf = UserShelfBooksService::getUserShelfBooksListByUid($this->uid);
            foreach ($res as &$v) {
                $v['is_on_user_shelf'] = 0;
                foreach ($shelf as $val) {
                    if ($v['bid'] == $val->bid) {
                        $v['is_on_user_shelf'] = 1;
                        break;
                    }
                }
            }
        }
        usort($res, function ($a, $b) {
            if ($a['time'] >= $b['time']) return -1;
            return 1;
        });
        $res = json_encode($res);
        $res = json_decode($res);
        foreach ($res as $key => &$each) {
            $rec = ShareUsersService::getUnlocked($this->uid, $each->bid);
            if ($rec) {
                $each->is_advertise_sub = 1;
            } else {
                $each->is_advertise_sub = 0;
            }
        }
        return response()->collection(new ReadRecordTransformer(), $res);
    }


    /**
     * @apiVersion 1.0.0
     * @apiDescription 添加阅读记录
     * @api {post} readrecord 添加阅读记录
     * @apiGroup ReadRecord
     * @apiName addReadRecord
     * @apiHeader {String} [Authorization]  token
     * @apiParam   {Int}         book_name    书名
     * @apiParam   {String}      chapter_name  章节名
     * @apiParam   {Int}         bid     bid
     * @apiParam   {Int}         cid    章节id
     * @apiSuccess {int}         code 状态码
     * @apiSuccess {String}      msg  信息
     * @apiSuccess {object}      data 结果集
     * @apiSuccessExample {json} Success-Response:
     *     HTTP/1.1 200 OK
     *     {
     *       code: 0,
     *       msg: "",
     *       data:{}
     *
     */
    public function addReadRecord(Request $request)
    {
        $param = $request->except('_url');
        if (checkParam($param, ['bid', 'cid', 'chapter_name'])) {
            return response()->error('LACK_PARAM');
        }
        $param['uid'] = $this->uid;
        $param['bid'] = BookService::decodeBidStatic($param['bid']);
        Redis::hget('book_read:' . $this->uid, $param['bid']);
        $param['book_name'] = '';
        ReadRecordService::addReadRecord($param);
        return response()->success();
    }


    /**
     * @apiVersion 1.0.0
     * @apiDescription 删除阅读记录
     * @api {get} readrecord/delete 删除阅读记录
     * @apiGroup ReadRecord
     * @apiHeader {String} [Authorization]  token 
     * @apiName delReadRecord
     * @apiParam   {String}         bid     多个bid以,分隔
     * @apiSuccess {int}         code 状态码
     * @apiSuccess {String}      msg  信息
     * @apiSuccess {object}      data 结果集
     * @apiSuccessExample {json} Success-Response:
     *     HTTP/1.1 200 OK
     *     {
     *       code: 0,
     *       msg: "",
     *       data:{}
     *
     */
    public function delReadRecord(Request $request)
    {
        $param = $request->except('_url');
        if (checkParam($param, ['bid'])) {
            return response()->error('LACK_PARAM');
        }
        $bids = explode(',', $param['bid']);
        array_walk($bids, function (&$item) {
            $item = BookService::decodeBidStatic($item);
        });
        ReadRecordService::delReadRecordStatic($this->uid, $bids);
        return response()->success();
    }
}