<?php

namespace App\Packages\Capsule\Models;

use App\Packages\Capsule\Repository\CapsuleOpenRepository;
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 string|Carbon $created_at
 *
 * @property User $user
 * @property Capsule $capsule
 *
 * @method static CapsuleOpenRepository repository()
 */
class CapsuleOpen extends Model
{
    use RepositoryTrait;

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

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

    /**
     * @param Capsule $capsule
     * @param User $user
     *
     * @return bool
     */
    public static function isOpenedByUser(Capsule $capsule, User $user)
    {
        return (new static())->query()
            ->where('capsule_id', '=', $capsule->id)
            ->where('user_id', '=', $user->id)
            ->exists();
    }

    /**
     * @param Capsule $capsule
     * @param User $user
     *
     * @return CapsuleOpen
     */
    public static function createOpen(Capsule $capsule, User $user)
    {
        $open = new CapsuleOpen();
        $open->user_id = $user->id;
        $open->capsule_id = $capsule->id;
        $open->save();

        return $open;
    }

    /**
     * @return HasOne
     */
    public function user()
    {
        return $this->hasOne(User::class, 'id', '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
    }
}
