<?php

namespace App\Http\Controllers\Api\V1;

use App\Models\DreamImages;
use App\Models\DreamInfoModel;
use App\Models\ReplyCommentsInfo;
use App\Models\UserDream;
use Illuminate\Http\Request;
use App\Services\Base\ErrorCode;
class MyController extends Controller
{
    /**
     * @api {get} /api/my/index 个人首页(index)
     * @apiDescription 个人首页(index)
     * @apiGroup My
     * @apiPermission Passport
     * @apiSuccessExample {json} Success-Response:
     * HTTP/1.1 200 O*  "status": true,
     *  "status_code": 0,
     *  "message": "",
     *  "data": {
     *      "my_care_num": 4,关注
     *      "my_fens_num": 3,粉丝
     *      "my_collection_num": 2,收藏
     *      "my_dream_num": 1,发帖
     *      "user": {
     *          "id": 1,
     *          "tel": "13880642880",
     *          "password": "",
     *           "nickname": "",
     *          "pic": "",
     *          "sign": 0,
     *          "money": 0,余额
     *          "sex": 1,
     *          "signture": "",个性签名
     *          "tall": "",
     *          "job": "",
     *          "emotion": 1,
     *          "address": "",
     *          "detail_address": "",
     *          "status": 1,
     *          "remember_token": "",
     *      }
     *  }
     * @apiErrorExample {json} Error-Response:
     * HTTP/1.1 400 Bad Request
     *{
     *      "status": true,
     *      "status_code": 0,
     *      "message": "",
     *      "data": {
     *          "user": null
     *      }
     *}
     */
    public function index()
    {
        $user = $this->getUser();
        /*
         * 我的关注人数,我的粉丝,收藏
         * 点赞？徽章？
         * */
        $data1 = $user->myCareNum;
        $data2 = $user->myFens;
        $data3 = $user->myCollection;
        $data4 = $user->UserDream;
        $my_care_num = count($data1);
        $my_fens_num = count($data2);
        $my_collection_num = count($data3);
        $my_dream_num = count($data4);//发帖数
        return $this->api(compact('my_care_num','my_fens_num','my_collection_num','my_dream_num','user'));
    }

    /**
     * @api {get} /api/my/persona 个人信息(persona)
     * @apiDescription 个人信息(persona)
     * @apiGroup My
     * @apiPermission Passport
     * @apiVersion 0.1.0
     * @apiSuccessExample {json} Success-Response:
     * HTTP/1.1 200 OK
     *{
     *    "status": true,
     *   "status_code": 0,
     *    "message": "",
     *    "data": {
     *        "user": {
     *              "id": 1,
     *              "tel": "13880642880",手机
     *              "nickname": "",昵称
     *              "sex": 1,性别
     *              "job": "", 职业
     *              "emotion": 1,情感状态
     *              "address": "",
     *              "detail_address": "",
     *              "status": 1,
     *              "tall": 1,   身高
     *         }
     *    }
     *}
     * @apiErrorExample {json} Error-Response:
     * HTTP/1.1 400 Bad Request
     *{
     *    "status": true,
     *    "status_code": 0,
     *    "message": "",
     *    "data": {
     *        "user": null
     *    }
     *}
     */
    public function persona()
    {
        $user = $this->getUser();
        return $this->api(compact('user'));
    }

    /**
     * @api {get} /api/my/recharge 充值(recharge)
     * @apiDescription 充值(recharge)
     * @apiGroup My
     * @apiPermission Passport
     * @apiVersion 0.1.0
     * @apiSuccessExample {json} Success-Response:
     * HTTP/1.1 200 OK
     * @apiErrorExample {json} Error-Response:
     * HTTP/1.1 400 Bad Request
     */
    public function recharge()
    {
        $user = $this->getUser();
        return $this->api(compact('user'));
    }

    /**
     * @api {get} /api/my/system_info 系统消息(systemInfo)
     * @apiDescription 系统消息(systemInfo)
     * @apiGroup My
     * @apiPermission Passport
     * @apiVersion 0.1.0
     * @apiSuccessExample {json} Success-Response:
     * HTTP/1.1 200 OK
     *{
     *  "status": true,
     *  "status_code": 0,
     *  "message": "",
     *  "data": {
     *     "data": [
     *           {
     *              "nickname": "",充值人
     *              "pivot": {
     *                  "coin": 0  捐赠梦想币数量
     *                }
     *          }
     *}
     * @apiErrorExample {json} Error-Response:
     * HTTP/1.1 400 Bad Request
     * {
     *   "status": true,
     *  "status_code": 0,
     *   "message": "",
     *   "data": {
     *        "data": []
     *   }
    *}
     */
    public function systemInfo()
    {
        $user = $this->getUser();
        $data = $user->SystemInfo;
        return $this->api(compact('data'));
    }

    /**
     * @api {get} /api/my/reply_my 回复我的(replyMy)
     * @apiDescription 回复我的(replyMy)
     * @apiGroup My
     * @apiPermission Passport
     * @apiVersion 0.1.0
     * @apiSuccessExample {json} Success-Response:
     * HTTP/1.1 200 OK
     *
     * {
     *    "status": true,
     *    "status_code": 0,
     *    "message": "",
     *    "data": {
     *        "comments_infos": [
     *            {
     *                 "id": 1,
     *                "dream_id": 2,
     *                "user_id": 2,
     *                "level": 2,
     *                "content": "啊哈", 评论内容
     *               "created_at": null, 评论时间
     *                "updated_at": null,
     *                "deleted_at": null,
     *                "dream_name": "去旅游去旅游2", 梦想介绍
     *               "dream_pic": "aaaaa", 梦想图片
     *                "progress": 0,   进度
     *               "reviewer": "22222",  评论者
     *                "reviewer_pic": "22222pic", 评论者头像
     *           }
     *       ]
     *  }
     * }
     * @apiErrorExample {json} Error-Response:
     * HTTP/1.1 400 Bad Request
     */
    public function replyMy()
    {
        $user = $this->getUser();
//        梦想
        $dreams = $user->UserDream;

        if (count($dreams) == 0)
            return $this->error(ErrorCode::DREAM_NOT_EXIST);

        foreach ($dreams as $dream){
            $comments_infos = $dream->DreamInfo;
            if (count($comments_infos) > 0) {
                foreach ($comments_infos as $k => $value) {
                    $value->dream_name = $dream->dream;
                    $value->dream_about = $dream->about;
                    $value->dream_pic = count($dream->dreamImgsFirst) > 0 ? $dream->dreamImgsFirst->pic : '';
                    $value->progress = $dream->money == 0 ? 0 :  floor($dream->get_money/$dream->money);
                    $value->reviewer = $value->CommentUser->nickname;
                    $value->reviewer_pic = $value->CommentUser->pic;
                }
            }
        }

        return $this->api(compact('comments_infos'));
    }

    /**
     * @api {post} /api/my/my_reply 我的回复(myReply)
     * @apiDescription 我的回复(recharge)
     * @apiGroup My
     * @apiParam {text}  content   回复内容
     * @apiParam {int} comment_id   评论ID
     * @apiPermission Passport
     * @apiVersion 0.1.0
     * @apiSuccessExample {json} Success-Response:
     * {
     *  "status": true,
     *   "status_code": 0,
     *   "message": "",
     *   "data": ""
    *}
     * HTTP/1.1 200 OK
     * @apiErrorExample {json} Error-Response:
     * {
     *   "status": false,
     *   "status_code": 1000,
     *   "message": "输入不正确",
     *  "data": null
    *}
    *{
     *    "status": false,
     *   "status_code": 600,
     *   "message": "保存用户数据失败",
     *   "data": null
    *}
     * HTTP/1.1 400 Bad Request
     */
    public function myReply(Request $request)
    {
        $user = $this->getUser();
        $data = $request->except('_token');
        $data['user_id'] = $user->id;

        if (!$request->content)
            return $this->error(ErrorCode::CLIENT_WRONG_PARAMS);

       $ok =  ReplyCommentsInfo::create($data);

        if ($ok) {
            return $this->api('');
        }else{
            return $this->error(ErrorCode::SAVE_USER_FAILED);
        }
    }

    /**
     * @api {get} /api/my/dream 我的梦想(dream)
     * @apiDescription 我的梦想(recharge)
     * @apiGroup My
     * @apiPermission Passport
     * @apiVersion 0.1.0
     * @apiSuccessExample {json} Success-Response:
     * {
     *   "status": true,
     *    "status_code": 0,
     *     "message": "",
     *     "data": {
     *          "dreams": [
     *        {
     *           "id": 2,
     *            "dream": "去旅游去旅游2",
     *           "about": "欧冠胡234",
     *            "dream_pic": "aaaaa",
     *            "progress": 0,  进度
     *        ]
     *     }
     * }
     * HTTP/1.1 200 OK
     * @apiErrorExample {json} Error-Response:
     * HTTP/1.1 400 Bad Request
     */
    public function dream()
    {
        $user = $this->getUser();
//        梦想
        $dreams = $user->UserDream;

        if (count($dreams) == 0)
            return $this->error(ErrorCode::DREAM_NOT_EXIST);

        foreach ($dreams as $dream){
            $dream->dream_pic = count($dream->dreamImgsFirst) > 0 ? $dream->dreamImgsFirst->pic : '';
            $dream->progress = $dream->money == 0 ? 0 :  floor($dream->get_money/$dream->money);
        }

        return $this->api(compact('dreams'));
    }

    /**
     * @api {get} /api/my/collection 我的收藏(collection)
     * @apiDescription 我的收藏(recharge)
     * @apiGroup My
     * @apiPermission Passport
     * @apiVersion 0.1.0
     * @apiSuccessExample {json} Success-Response:
     * HTTP/1.1 200 OK
     * @apiErrorExample {json} Error-Response:
     * HTTP/1.1 400 Bad Request
     */
    public function collection()
    {
        $user = $this->getUser();
        return $this->api(compact('user'));
    }

    /**
     * @api {get} /api/my/setting 设置(setting)
     * @apiDescription 设置(setting)
     * @apiGroup My
     * @apiPermission Passport
     * @apiVersion 0.1.0
     * @apiSuccessExample {json} Success-Response:
     * HTTP/1.1 200 OK
     * @apiErrorExample {json} Error-Response:
     * HTTP/1.1 400 Bad Request
     */
    public function setting()
    {
        $user = $this->getUser();
        return $this->api(compact('user'));
    }

    /**
     * @api {post} /api/my/add_dream 发布梦想(addDream)
     * @apiDescription 发布梦想(addDream)
       * @apiParam {string}  pic   梦想图片 数组
       * @apiParam {string}  videos   梦想视频
       * @apiParam {string}  dream   梦想标题
       * @apiParam {string}  about   梦想介绍
       * @apiParam {int}  money   梦想币
     * @apiGroup My
     * @apiPermission Passport
     * @apiVersion 0.1.0
     * @apiSuccessExample {json} Success-Response:
     * {
     *    "status": true,
     *   "status_code": 0,
     *   "message": "",
     *    "data": ""
     *}
     * HTTP/1.1 200 OK
     * @apiErrorExample {json} Error-Response:
     * {
     *    "status": false,
     *    "status_code": 600,
     *    "message": "保存用户数据失败",
     *    "data": null
     * }
     * HTTP/1.1 400 Bad Request
     */
    public function addDream(Request $request)
    {
        $user = $this->getUser();
        $validator = \Validator::make($request->all(),
            [
                'dream'  => 'required',
                'about'  => 'required',
                'money'  => 'required|integer',
            ],
            [
                'dream.required'  => '梦想标题必填',
                'about.required'  => '梦想介绍必填',
                'money.required'  => '梦想币必填',
                'money.integer'  => '梦想币必须是正整数',
            ]
        );
        if($validator->fails()) return $this->validatorError($validator->messages()->all(),ErrorCode::CLIENT_WRONG_PARAMS);

        $data = $request->except('_token','pic');
        $data['created_at'] = date('Y-m-d H:i:s');
        $data['updated_at'] = date('Y-m-d H:i:s');
        $dream_id = DreamInfoModel::insertGetId($data);

        if ($dream_id) {
            $data1['dream_id'] = $dream_id;
            $data1['user_id'] = $user->id;
            $data1['created_at'] = date('Y-m-d H:i:s');
            $data1['updated_at'] = date('Y-m-d H:i:s');
            $arr = $request->pic;
            $videos = $request->videos;
            if (empty($arr) && empty($videos))   return $this->error(ErrorCode::ATTACHMENT_NOT_EXIST);
            $ok = UserDream::create($data1);
            $arr1 = [];
            if ($ok) {
                if (is_array($arr)) {
                    foreach ($arr as $k => $v){
                        $arr1[] = [
                            'dream_id'=>$dream_id,
                            'pic' => $v,
                            'created_at' =>date('Y-m-d H:i:s'),
                            'updated_at' =>date('Y-m-d H:i:s'),
                        ];
                    }
                    DreamImages::insert($arr1);
                }
                return $this->api('');
            }else{
                DreamInfoModel::destroy($dream_id);
                return $this->error(ErrorCode::SAVE_USER_FAILED);
            }
        }else{
            return $this->error(ErrorCode::SAVE_USER_FAILED);
        }
    }

    /**
     * @api {get} /api/my/dream_about 梦想介绍(dreamAbout)
     * @apiDescription 梦想介绍(dreamAbout)
     * @apiGroup My
     * @apiPermission Passport
     * @apiVersion 0.1.0
     * @apiSuccessExample {json} Success-Response:
     * HTTP/1.1 200 OK
     * @apiErrorExample {json} Error-Response:
     * HTTP/1.1 400 Bad Request
     */
    public function dreamAbout()
    {
        $user = $this->getUser();
        return $this->api(compact('user'));
    }
}
