<?php

namespace app\common\model;

use app\common\model\Contract;
use app\common\model\ProjectSchedule;

/**
 * @property array<ProjectSchedule> $schedules
 * @property array<Contract> $contracts
 */
class Project extends Base
{
    protected $schema = [
        'id'     => 'int',       // id
        'create_time'    => 'datetime',  // 创建时间
        'update_time'    => 'datetime',  // 更新时间
        'delete_time'    => 'datetime',  // 删除时间
        'name'   => 'varchar',   // 名称
        'responsibility_person_id'    => 'int',       // 责任人id
        'desc'   => 'text',      // 描述
        'source'         => 'varchar',   // 来源
        'estimated_amount'       => 'int',       // 预估金额, 分为单位
        'status'         => 'varchar',   // 状态值
        'project_start_date'     => 'date',      // 项目周期开始时间
        'project_end_date'       => 'date',      // 项目周期结束时间
        'dev_start_date'         => 'date',      // 开发开始时间
        'dev_end_date'   => 'date',      // 开发结束时间
        'pre_dev_time'   => 'int',       // 约定开发周期,单位为天
        'maintain_start_date'    => 'date',      // 维护开始时间
        'maintain_end_date'      => 'date',      // 维护结束时间
        'pre_maintain_time'      => 'int',       // 约定维护周期,单位为天
        'participants_id'   => 'json',      // 项目参与人员
    ];

    protected $type = [
        'participants_id' => 'array'
    ];

    public function responsibilityPersonName()
    {
        return $this->belongsTo(Admin::class, 'responsibility_person_id', 'id');
    }

    public function contracts()
    {
        return $this->hasMany(Contract::class);
    }

    public function schedules()
    {
        return $this->hasMany(ProjectSchedule::class)
            ->field('s.*')
            ->field('a.real_name as updater')
            ->alias('s')
            ->order('s.start_date asc')
            ->join('admin a', 'a.id = s.updater_id', 'LEFT');
    }
}