<?php

namespace App\Models;

use Auth;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\SoftDeletes;

/**
 * 邀请码
 *
 * @property int                             $id
 * @property int                             $uid        邀请人ID
 * @property int                             $fuid       受邀人ID
 * @property string                          $code       邀请码
 * @property int                             $status     邀请码状态:0-未使用、1-已使用、2-已过期
 * @property \Illuminate\Support\Carbon      $dateline   有效期至
 * @property \Illuminate\Support\Carbon      $created_at 创建时间
 * @property \Illuminate\Support\Carbon      $updated_at 最后更新时间
 * @property \Illuminate\Support\Carbon|null $deleted_at 删除时间
 * @property-read \App\Models\User|null      $generator
 * @property-read string                     $status_label
 * @property-read \App\Models\User|null      $user
 * @method static Builder|Invite newModelQuery()
 * @method static Builder|Invite newQuery()
 * @method static Builder|Invite onlyTrashed()
 * @method static Builder|Invite query()
 * @method static Builder|Invite uid()
 * @method static Builder|Invite whereCode($value)
 * @method static Builder|Invite whereCreatedAt($value)
 * @method static Builder|Invite whereDateline($value)
 * @method static Builder|Invite whereDeletedAt($value)
 * @method static Builder|Invite whereFuid($value)
 * @method static Builder|Invite whereId($value)
 * @method static Builder|Invite whereStatus($value)
 * @method static Builder|Invite whereUid($value)
 * @method static Builder|Invite whereUpdatedAt($value)
 * @method static Builder|Invite withTrashed()
 * @method static Builder|Invite withoutTrashed()
 * @mixin \Eloquent
 */
class Invite extends Model {
	use SoftDeletes;

	protected $table = 'invite';
	protected $dates = ['dateline', 'deleted_at'];

	public function scopeUid($query) {
		return $query->whereUid(Auth::id());
	}

	public function generator(): HasOne {
		return $this->hasOne(User::class, 'id', 'uid');
	}

	public function user(): HasOne {
		return $this->hasOne(User::class, 'id', 'fuid');
	}

	public function getStatusLabelAttribute(): string {
		switch($this->attributes['status']){
			case 0:
				$status_label = '<span class="badge badge-success">'.trans('home.invite_code_table_status_un').'</span>';
				break;
			case 1:
				$status_label = '<span class="badge badge-danger">'.trans('home.invite_code_table_status_yes').'</span>';
				break;
			case 2:
				$status_label = '<span class="badge badge-default">'.trans('home.invite_code_table_status_expire').'</span>';
				break;
			default:
				$status_label = '<span class="badge badge-default"> 未知 </span>';
		}

		return $status_label;
	}
}