<?php

namespace App\Http\Models;

use Auth;
use Eloquent;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\DatabaseNotification;
use Illuminate\Notifications\DatabaseNotificationCollection;
use Illuminate\Notifications\Notifiable;
use Illuminate\Support\Carbon;

/**
 * 用户信息
 * Class User
 *
 * @package App\Http\Models
 * @mixin Eloquent
 * @property int                                                        $id
 * @property string                                                     $email                邮箱
 * @property string                                                     $username             用户名
 * @property string                                                     $password             密码
 * @property int                                                        $port                 代理端口
 * @property string                                                     $passwd               代理密码
 * @property string                                                     $vmess_id             V2Ray用户ID
 * @property int                                                        $transfer_enable      可用流量,单位字节,默认1TiB
 * @property int                                                        $u                    已上传流量,单位字节
 * @property int                                                        $d                    已下载流量,单位字节
 * @property int                                                        $t                    最后使用时间
 * @property string|null                                                $ip                   最后连接IP
 * @property int                                                        $enable               代理状态
 * @property string                                                     $method               加密方式
 * @property string                                                     $protocol             协议
 * @property string|null                                                $protocol_param       协议参数
 * @property string                                                     $obfs                 混淆
 * @property string|null                                                $obfs_param           混淆参数
 * @property int                                                        $speed_limit_per_con  单连接限速,默认10G,为0表示不限速,单位Byte
 * @property int                                                        $speed_limit_per_user 单用户限速,默认10G,为0表示不限速,单位Byte
 * @property string|null                                                $wechat               微信
 * @property string|null                                                $qq                   QQ
 * @property string                                                     $usage                用途:1-手机、2-电脑、3-路由器、4-其他
 * @property int                                                        $pay_way              付费方式:0-免费、1-季付、2-月付、3-半年付、4-年付
 * @property int                                                        $balance              余额,单位分
 * @property string|null                                                $enable_time          开通日期
 * @property string                                                     $expire_time          过期时间
 * @property int                                                        $ban_time             封禁到期时间
 * @property string|null                                                $remark               备注
 * @property int                                                        $level                等级:可定义名称
 * @property int                                                        $is_admin             是否管理员:0-否、1-是
 * @property string                                                     $reg_ip               注册IP
 * @property int                                                        $last_login           最后登录时间
 * @property int                                                        $referral_uid         邀请人
 * @property string|null                                                $reset_time           流量重置日期,NULL表示不重置
 * @property int                                                        $invite_num           可生成邀请码数
 * @property int                                                        $status               状态:-1-禁用、0-未激活、1-正常
 * @property string|null                                                $remember_token
 * @property Carbon|null                                                $created_at
 * @property Carbon|null                                                $updated_at
 * @property-read Collection|UserLabel[]                                $label
 * @property-read int|null                                              $label_count
 * @property-read Level                                                 $levelList
 * @property-read DatabaseNotificationCollection|DatabaseNotification[] $notifications
 * @property-read int|null                                              $notifications_count
 * @property-read Collection|Payment[]                                  $payment
 * @property-read int|null                                              $payment_count
 * @property-read User                                                  $referral
 * @property-read UserSubscribe                                         $subscribe
 * @method static Builder|User newModelQuery()
 * @method static Builder|User newQuery()
 * @method static Builder|User query()
 * @method static Builder|User uid()
 * @method static Builder|User whereEmail($value)
 * @method static Builder|User whereBalance($value)
 * @method static Builder|User whereBanTime($value)
 * @method static Builder|User whereCreatedAt($value)
 * @method static Builder|User whereD($value)
 * @method static Builder|User whereEnable($value)
 * @method static Builder|User whereEnableTime($value)
 * @method static Builder|User whereExpireTime($value)
 * @method static Builder|User whereId($value)
 * @method static Builder|User whereInviteNum($value)
 * @method static Builder|User whereIp($value)
 * @method static Builder|User whereIsAdmin($value)
 * @method static Builder|User whereLastLogin($value)
 * @method static Builder|User whereLevel($value)
 * @method static Builder|User whereMethod($value)
 * @method static Builder|User whereObfs($value)
 * @method static Builder|User whereObfsParam($value)
 * @method static Builder|User wherePasswd($value)
 * @method static Builder|User wherePassword($value)
 * @method static Builder|User wherePayWay($value)
 * @method static Builder|User wherePort($value)
 * @method static Builder|User whereProtocol($value)
 * @method static Builder|User whereProtocolParam($value)
 * @method static Builder|User whereQq($value)
 * @method static Builder|User whereReferralUid($value)
 * @method static Builder|User whereRegIp($value)
 * @method static Builder|User whereRemark($value)
 * @method static Builder|User whereRememberToken($value)
 * @method static Builder|User whereResetTime($value)
 * @method static Builder|User whereSpeedLimitPerCon($value)
 * @method static Builder|User whereSpeedLimitPerUser($value)
 * @method static Builder|User whereStatus($value)
 * @method static Builder|User whereT($value)
 * @method static Builder|User whereTransferEnable($value)
 * @method static Builder|User whereU($value)
 * @method static Builder|User whereUpdatedAt($value)
 * @method static Builder|User whereUsage($value)
 * @method static Builder|User whereUsername($value)
 * @method static Builder|User whereVmessId($value)
 * @method static Builder|User whereWechat($value)
 */
class User extends Authenticatable
{
	use Notifiable;

	protected $table = 'user';
	protected $primaryKey = 'id';

	function scopeUid($query)
	{
		return $query->whereId(Auth::user()->id);
	}

	function levelList()
	{
		return $this->hasOne(Level::class, 'level', 'level');
	}

	function payment()
	{
		return $this->hasMany(Payment::class, 'user_id', 'id');
	}

	function label()
	{
		return $this->hasMany(UserLabel::class, 'user_id', 'id');
	}

	function subscribe()
	{
		return $this->hasOne(UserSubscribe::class, 'user_id', 'id');
	}

	function referral()
	{
		return $this->hasOne(User::class, 'id', 'referral_uid');
	}

	function getBalanceAttribute($value)
	{
		return $value/100;
	}

	function setBalanceAttribute($value)
	{
		return $this->attributes['balance'] = $value*100;
	}
}