<?php namespace Wc\Lms\Entities;

use Illuminate\Database\Eloquent\Model;
use Pta\Formbuilder\Traits\ModelSchemaBuilderTrait;
use Pta\Formbuilder\Lib\Fields\SelectField;
use Wc\Lms\Src\Entities\Department;


class Course extends Model
{

    use ModelSchemaBuilderTrait;

    protected $table = 'courses';

    protected $guarded = [
        'id',
    ];

    protected $skipFields = [
        'start_date',
        'end_date',
        'created_at',
        'deleted_at',
        'new',
        'active',
        'updated_at',
        'rolling_enrollment',
        'enrollment_type'
    ];


    /**
     * Create Relationship with CreditTypes
     * @return CreditType many-to-many relationship
     */
    public function credits()
    {
        return $this->belongsToMany('Modules\Lms\Entities\CreditType',
            'course_credit_type')->withPivot('key', 'value', 'course_code', 'course_price', 'transfer',
            'transfer_level', 'proctored', 'prerequisite', 'active', 'deleted_at')->orderBy('weight', 'asc');
    }

    /**
     * Links Relationship
     * @return link Many-to-Many relationship
     */
    public function links()
    {
        return $this->belongsToMany('Modules\Lms\Src\Entities\Link')->orderBy('weight', 'asc');
    }

    /**
     * Syllabus Relationship
     * @return Syllabus one-to-one relationship
     */
    public function syllabus()
    {
        return $this->hasOne('Modules\Lms\Src\Entities\Syllabus');
    }

    /**
     * CourseMenu Relationship
     * @return CourseMenu one-to-one relationship
     */
    public function menu()
    {
        return $this->hasOne('Modules\Lms\Src\Entities\CourseMenu');
    }

    /**
     * @return Department Relationship
     */
    public function department()
    {
        return $this->belongsTo('Modules\Lms\Src\Entities\Department');
    }

    /**
     * @return School Relationship
     */
    public function schools()
    {
        return $this->belongsToMany('Modules\Lms\Src\Entities\School',
            'school_course_credit_type')->withPivot('credit_type_id');
    }

    /**
     * @return Section Relationship
     */
    public function courseSections()
    {
        return $this->hasMany('Modules\Lms\Src\Entities\Section');
    }


    public function department_id()
    {
        $department = new Department;
        return new SelectField($department, 'name', function() use ($department) {
            if(is_subclass_of($department, 'Illuminate\Database\Eloquent\Model')){
                return $department->where('active',1)->get(array('id','name'));
            }
            return false;
        });
    }
}