<?php

namespace Modules\Admin\app\Models;

use App\Models\User;
use Illuminate\Database\Eloquent\Model;

class Sprint extends Model
{
    protected $table = 'sprint';
    protected $fillable = ['id', 'name', 'point', 'project_id', 'start_date', 'end_date', 'complete_date'];

    public function criterias()
    {
        return $this->belongsToMany(Criteria::class, 'sprints_criterias')
            ->withPivot('point', 'expect_result', 'actual_result', 'note', "created_by");
    }

    // Định nghĩa một quan hệ với bảng users thông qua bảng users_criterias
    public function users2()
    {
        return $this->hasManyThrough(
            User::class,  // Model đích
            UserCriteria::class,  // Model trung gian
            'sprint_id',  // Khóa ngoại trong bảng users_criterias
            'email',  // Trường để khớp trong bảng users
            'id',  // Khóa chính trong bảng sprint
            'user_email'  // Trường để khớp trong bảng users_criterias
        );
    }

    public function users()
    {
        return $this->hasMany(UserCriteria::class)
            ->leftjoin('users', 'users.email', '=', 'users_criterias.user_email')
            ->leftjoin('criterias', 'criterias.id', '=', 'users_criterias.criteria_id')
            ->select(
                'users.id as user_id',
                'users.name as user',
                'users.email as user_email',

                'criteria_id',
                'users_criterias.point as point',
                'users_criterias.note as note',
                'users_criterias.created_by as created_by',

                'criterias.name as name',
                'criterias.description as description',
            );
    }

    public function userCriterias()
    {
        return $this->hasMany(UserCriteria::class);
    }

    public function sprintsCriterias()
    {
        return $this->hasMany(SprintCriteria::class, 'sprint_id');
    }
    public function usersCriterias()
    {
        return $this->hasMany(UserCriteria::class, 'sprint_id');
    }
}
