<?php

namespace app\dao;

use App\model\Signlog;



class SignDao
{
    /**
     * 签到函数
     * 
     */
    public static function Sign($user_id)
    {
        if (self::search_Sign_today($user_id) == 1) {
            return 0;
        }
        $Signlog = new Signlog();
        $Signlog->userid = $user_id;
        $Signlog->save();
        UserRewardDao::sing($user_id, 30);
    }
    /**
     * 查询今天是否签到
     * 0没签到1签到
     */
    public static function search_Sign_today($user_id)
    {
        $today = date('Y-m-d');
        $is_sign = Signlog::where('userid', $user_id)->where('created_at', '>=', $today . " 00:00:00")->count();
        return $is_sign == 0 ? 0 : 1;
    }
    /**
     * 查询当月签到数据
     * 
     */
    public static function search_Sign_tomon($user_id)
    {
        $startTime = date('Y-m-01', time()); //获取该月份的第一天
        $endTime = date('Y-m-t', time()); //获取该月份的最后一天
        $mon_data = Signlog::where('userid',$user_id)->whereBetween('created_at', [$startTime . " 00:00:00", $endTime . " 23:59:59"])->orderBy('created_at', 'ASC')->get();
        $days = [];
        foreach ($mon_data as $sign) {
            // 将签到日期提取出来
            $days[] = $sign->created_at->format('d'); // 格式化为 Y-m-d 格式
        }
        // 获取当前月份的天数
        $days_in_month = date('t');
        for ($day = 1; $day <= $days_in_month; $day++) {
            // 判断该天是否有签到
            if (in_array($day, $days)) {
                $res[$day] = 1; // 已签到
            } else {
                $res[$day] = 0; // 未签到
            }
        }
        return $res;
    }
    /**
     * 查询连续签到天数
     * 
     */
    public static function search_Sign_tolong($user_id)
    {
        $startTime = date('Y-m-01', time()); // 获取该月份的第一天
        $endTime = date('Y-m-t', time()); // 获取该月份的最后一天
        $mon_data = Signlog::where('userid',$user_id)->whereBetween('created_at', [$startTime . " 00:00:00", $endTime . " 23:59:59"])
            ->orderBy('created_at', 'ASC')
            ->get();

        // 签到的日期数组
        $signed_days = [];
        $today = date('d');
        foreach ($mon_data as $sign) {
            // 获取签到的日期并保存
            // 只有没有兑换奖励的才算签到有效
            if ($sign->isexchange == 0) {
                $signed_days[] = $sign->created_at->format('d');
            }
        }

        // 获取当前月份的天数
        $days_in_month = date('t');
        $sign_days = 0; // 连续签到天数

        // 检查每从今天开始往后是否连续签到
        for ($day = $today; $day >= 0; $day--) {
            // 检查当前日期是否有签到
            if (in_array($day, $signed_days)) {
                $sign_days++; // 连续签到天数加 1
            } else {
                break;
            }
        }
        if($sign_days==7){
            UserRewardDao::sing($user_id,500);
        }

        // 返回连续签到天数
        return  $sign_days;
    }
}