<?php


namespace App\Http\Controllers;


use App\Services\OfferService;
use App\Services\ShareService;
use Carbon\Carbon;
use Common\Model\RedisModel;
use Illuminate\Http\Request;

class ShareController extends Controller
{
    private $service;

    public function __construct(ShareService $service)
    {
        $this->service = $service;
    }

    //分享的类型id
    const INTEGRAL_TYPE_SHARE = 4;

    public function store(Request $request)
    {
        //点击分享的用户id
        $clickUserId = $request->user->user_id;
        //分享人的user_id
        $userId = $request->get('user_id');
        $integralId = self::INTEGRAL_TYPE_SHARE;
        $map = [
            //这个userId是点击人的用户id
            'user_id'     => $userId,
            'integral_id' => $integralId,
        ];
        //要检测分享,分享是每天每个用户,同一个用户不能够点击自己分享多次
        //自己也不能点击自己的分享
        if ($this->checkCanShare($userId, $clickUserId)) {
            $result = $this->service->addShare($map);
            if ($result['errcode'] === self::SUCCESS) {
                return $this->Export(0, 'ok');
            } else {
                return $this->Export(self::SHARE_FAIL);
            }
        }

        return $this->Export(0, 'ok');
    }

    //检测是否能够分享
    private function checkCanShare($userId, $clickUserId)
    {
        //自己不能点击分享
        if ($userId == $clickUserId) {
            return false;
        }
        //首先去判断分享缓存是否存在
        $redis = new RedisModel();
        $date = date('Ymd');
        $hashKey = 'ic_welfare_share_' . $date;
        $shareList = $redis->hget($hashKey, $userId);
        $shareList = json_decode($shareList, true);
        //分享历史
        if (!$shareList) {
            //不存在的话,建立一个新的
            $shareList = [$clickUserId];
            $redis->hset($hashKey, $userId, json_encode($shareList));
            $endTime = Carbon::now()->endOfDay()->timestamp;
            $redis->expireAt($hashKey, $endTime);

            //因为都没有对应的值,那就是代表没有分享过,直接返回可以分享
            return true;
        } else {
            //如果在里面,代表已经分享过,返回不能分享了
            if (in_array($clickUserId, $shareList)) {
                return false;
            }

            //不在里面代表今天还没有对该用户的分享链接点击,返回可分享
            array_push($shareList, $clickUserId);
            $redis->hset($hashKey, $userId, json_encode($shareList));

            return true;
        }
    }
}