<?php

declare(strict_types=1);

namespace App\Model;


use Hyperf\Database\Model\Relations\HasOne;
use Hyperf\Snowflake\Concern\Snowflake;

/**
 * @property int $inquiry_case_id 主键id
 * @property int $user_id 用户id
 * @property int $patient_id 患者id
 * @property int $order_inquiry_id 订单-问诊id
 * @property int $family_id 家庭成员id
 * @property int $relation 与患者关系（1:本人 2:父母 3:爱人 4:子女 5:亲戚 6:其他 ）
 * @property int $status 状态（1:正常 2:删除）
 * @property string $name 患者名称
 * @property int $sex 患者性别（0:未知 1:男 2:女）
 * @property int $age 患者年龄
 * @property string $height 身高（cm）
 * @property string $weight 体重（kg）
 * @property int $disease_class_id 疾病分类id-系统
 * @property string $disease_class_name 疾病名称-系统
 * @property string $diagnosis_date 确诊日期
 * @property string $disease_desc 病情描述（主诉）
 * @property string $diagnose_images 复诊凭证(多个使用逗号分隔)
 * @property int $is_allergy_history 是否存在过敏史（0:否 1:是）
 * @property string $allergy_history 过敏史描述
 * @property int $is_family_history 是否存在家族病史（0:否 1:是）
 * @property string $family_history 家族病史描述
 * @property int $is_pregnant 是否备孕、妊娠、哺乳期（0:否 1:是）
 * @property string $pregnant 备孕、妊娠、哺乳期描述
 * @property int $is_taboo 是否存在禁忌药物（0:否 1:是）问诊购药时存在
 * @property \Carbon\Carbon $created_at 创建时间
 * @property \Carbon\Carbon $updated_at 修改时间
 * @property-read BasicJob $BasicJob 
 * @property-read BasicNation $BasicNation 
 * @property-read OrderInquiry $OrderInquiry 
 */
class OrderInquiryCase extends Model
{
    use Snowflake;

    /**
     * The table associated with the model.
     */
    protected ?string $table = 'order_inquiry_case';

    /**
     * The attributes that are mass assignable.
     */
    protected array $fillable = ['inquiry_case_id', 'user_id', 'patient_id', 'order_inquiry_id', 'family_id', 'relation', 'status', 'name', 'sex', 'age', 'height', 'weight', 'disease_class_id', 'disease_class_name', 'diagnosis_date', 'disease_desc', 'diagnose_images', 'is_allergy_history', 'allergy_history', 'is_family_history', 'family_history', 'is_pregnant', 'pregnant', 'is_taboo', 'created_at', 'updated_at'];

    protected string $primaryKey = "inquiry_case_id";

    /**
     * 关联问诊订单表
     */
    public function OrderInquiry(): HasOne
    {
        return $this->hasOne(OrderInquiry::class, 'order_inquiry_id', 'order_inquiry_id');
    }

    /**
     * 关联民族表
     */
    public function BasicNation(): HasOne
    {
        return $this->hasOne(BasicNation::class, 'nation_id', 'nation_id');
    }

    /**
     * 关联职位表
     */
    public function BasicJob(): HasOne
    {
        return $this->hasOne(BasicJob::class, 'job_id', 'job_id');
    }

    /**
     * 单条
     * @param array $params
     * @param array $fields
     * @return object|null
     */
    public static function getOne(array $params, array $fields = ['*']): object|null
    {
        return self::where($params)->first($fields);
    }

    /**
     * 获取结束问诊订单病例-单
     * @param array $params
     * @param array $order_inquiry_params
     * @param array $fields
     * @return object|null
     */
    public static function getEndOrderInquiryCaseOne(array $params, array $order_inquiry_params, array $fields = ['*']): object|null
    {
        return self::with([
            "OrderInquiry",
        ])
            ->whereHas('OrderInquiry' , function($query) use ($order_inquiry_params){
                $query->where($order_inquiry_params);
            })
            ->where($params)
            ->first($fields);
    }

    /**
     * 新增
     * @param array $data
     * @return \Hyperf\Database\Model\Model|OrderInquiryCase
     */
    public static function addOrderInquiryCase(array $data): \Hyperf\Database\Model\Model|OrderInquiryCase
    {
        return self::create($data);
    }
}
