<?php

namespace app\repository;

use app\model\Task;
use app\model\Task as TaskModel;
use app\model\TaskAccount;
use app\service\Repository;
use app\traits\task\TaskAccountTrait;
use app\traits\task\TaskCompletionRecordTrait;
use think\Model;

/**
 * 任务
 *
 * @package app\repository
 * @method self getInstance(Model $model = null) static
 */
class TaskRepository extends Repository
{

    use TaskCompletionRecordTrait;
    use TaskAccountTrait;


    //当前进行中的任务
    public function getDoingTaskCount($taskId = 0)
    {
        return $this->model->when($taskId != 0, function ($q) use ($taskId) {
            $q->where("task_id", $taskId);
        })->where("status", Task::COMMON_ON)->count();
    }


    /**
     * 过滤用户的任务
     * */
    public function filterUserTask($item, $account)
    {
        switch ($item->type) {
            //分享
            case TaskModel::TYPE_SHARE :
                $accountTask = TaskRepository::getInstance()->userTask($item["id"], $account["id"]);
                //没有提交  或者 已提交的任务状态
                $item->account_status = empty($accountTask) ? TaskAccount::$status_notsubmit : $accountTask["status"];
                $completed_quantity = TaskRepository::getInstance()->getShareTaskSuccess($item, $account);
                if ($item->account_status == TaskAccount::$status_success) {
                    $item->completed_quantity = ($completed_quantity > $item["cycle"]) ? $item["cycle"] : $completed_quantity;
                } else {
                    $item->completed_quantity = $completed_quantity;
                }
                break;
            //线上签到
            case TaskModel::TYPE_SIGN_IN :
                $accountTask = TaskRepository::getInstance()->userTask($item["id"], $account["id"]);
                //没有提交  或者 已提交的任务状态
                $item->account_status = empty($accountTask) ? TaskAccount::$status_notsubmit : $accountTask["status"];
                $completed_quantity = TaskRepository::getInstance()->getSignInTaskSuccess($item, $account);
                if ($item->account_status == TaskAccount::$status_success) {
                    $item->completed_quantity = ($completed_quantity > $item["cycle"]) ? $item["cycle"] : $completed_quantity;
                } else {
                    $item->completed_quantity = $completed_quantity;
                }
                break;
            //线下签到
            case TaskModel::TYPE_OFFLINE_SIGN_IN :
                $accountTask = TaskRepository::getInstance()->userTask($item["id"], $account["id"]);
                //没有提交  或者 已提交的任务状态
                $item->account_status = empty($accountTask) ? TaskAccount::$status_notsubmit : $accountTask["status"];
                $completed_quantity = TaskRepository::getInstance()->getOfflineSignInTaskSuccess($item, $account);
                if ($item->account_status == TaskAccount::$status_success) {
                    $item->completed_quantity = ($completed_quantity > $item["cycle"]) ? $item["cycle"] : $completed_quantity;
                } else {
                    $item->completed_quantity = $completed_quantity;
                }
                break;
            //截图分享
            case TaskModel::TYPE_SHARE_SCREENSHOTS :
                $item = TaskRepository::getInstance()->getShareScreenshotsTaskSuccess($item, $account);
                break;
        }

        return $item;
    }


    /**
     * 检查完成条件
     * */
    public function checkCompletionConditions($task, $accout)
    {
        switch ($task->type) {
            //分享
            case TaskModel::TYPE_SHARE :
                return TaskRepository::getInstance()->checkShareTaskCompletionConditions($task, $accout);
                break;
            //线上签到
            case TaskModel::TYPE_SIGN_IN :
                return TaskRepository::getInstance()->checkSignInTaskCompletionConditions($task, $accout);
                break;
            //线下签到
            case TaskModel::TYPE_OFFLINE_SIGN_IN :
                return TaskRepository::getInstance()->checkOfflineSignInTaskCompletionConditions($task, $accout);
                break;
            //截图分享
            case TaskModel::TYPE_SHARE_SCREENSHOTS :
                if (empty(input("image"))) {
                    return false;
                }
                return TaskRepository::getInstance()->checkShareScreenshotsTaskCompletionConditions($task, $accout);
                break;
        }
    }

    /**
     * 完成一个任务
     * */
    public function completeTask($task, $accout)
    {
        switch ($task->type) {
            //分享
            case TaskModel::TYPE_SHARE :
                return TaskRepository::getInstance()->completeShareTask($task, $accout);
                break;
            //线上签到
            case TaskModel::TYPE_SIGN_IN :
                return TaskRepository::getInstance()->completeSignInTask($task, $accout);
                break;
            //线下签到
            case TaskModel::TYPE_OFFLINE_SIGN_IN :
                return TaskRepository::getInstance()->completeOfflineSignInTask($task, $accout);
                break;
            //截图分享
            case TaskModel::TYPE_SHARE_SCREENSHOTS :
                return TaskRepository::getInstance()->completeShareScreenshotsTask($task, $accout);
                break;
        }
    }

}