<?php

namespace App\Packages\Capsule\Models;

use App\Packages\Capsule\Repository\CapsuleTaggedUserRepository;
use App\Packages\Core\Traits\RepositoryTrait;
use App\Packages\User\Models\User;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Support\Carbon;

/**
 * @property int $id
 * @property int $user_id
 * @property int $capsule_id
 * @property int $by_user_id
 *
 * @property string|Carbon $created_at
 * @property string|Carbon $updated_at
 *
 * @property User $user
 * @property User $byUser
 * @property Capsule $capsule
 *
 * @method static CapsuleTaggedUserRepository repository()
 */
class CapsuleTaggedUser extends Model
{
	use RepositoryTrait;

	/** @var string */
	public static $repositoryClass = CapsuleTaggedUserRepository::class;

	/** @var string */
	protected $table = 'table_capsule_tagged_user';

	/**
	 * @param Capsule $capsule
	 * @param User $owner
	 * @param User $taggedInUser
	 *
	 * @return CapsuleTaggedUser|User
	 */
	public static function assignTaggedUser(Capsule $capsule, User $owner, User $taggedInUser)
	{
		$taggedUser = new CapsuleTaggedUser();
		$taggedUser->capsule_id = $capsule->id;
		$taggedUser->by_user_id = $owner->id;
		$taggedUser->user_id = $taggedInUser->id;
		$taggedUser->save();

		return $taggedUser;
	}

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

	/**
	 * @return HasOne
	 */
	public function byUser()
	{
		return $this->hasOne(User::class, 'id', 'by_user_id');
	}

	/**
	 * @return HasOne
	 */
	public function capsule()
	{
		return $this->hasOne(Capsule::class, 'id', 'capsule_id');
	}

    public function setUpdatedAt($value)
    {
        //Do-nothing
    }

    public function getUpdatedAtColumn()
    {
        //Do-nothing
    }
}
