<?php
namespace app\mobile\service;
use think\facade\Db;

class OutplantApprovers
{
    public static function personId($value) {
        return preg_match('/^[1-9][0-9]{0,9}$/D', (string)$value) && (float)$value <= 2147483647 ? (int)$value : 0;
    }
    public static function candidates($mid) {
        $rows=Db::name('admin_base')->where('mid',$mid)->column('title');
        if (!$rows || ($mid===21 && count($rows)!==1)) return [];
        $ids=array_map([self::class,'personId'],$rows);
        if (in_array(0,$ids,true)) return [];
        return array_map('intval',Db::name('admin_user')->whereIn('id',array_unique($ids))->where('status',1)->column('id'));
    }
    public static function managerState($department) {
        $jobs=Db::name('admin_org')->where(['mid'=>$department['id'],'title'=>'经理'])->column('id');
        $managers=$jobs ? Db::name('admin_user')->whereIn('job',$jobs)->where(['dpt'=>$department['id'],'status'=>1])->field('id,truename')->order('id')->select()->toArray() : [];
        $rows=Db::name('admin_base')->where(['mid'=>22,'title'=>(string)$department['id']])->order('id')->select()->toArray();
        $manager=count($managers)===1 ? $managers[0] : null;
        $proxyId=count($rows)===1 ? self::personId($rows[0]['content']) : 0;
        $proxy=$proxyId ? Db::name('admin_user')->where(['id'=>$proxyId,'status'=>1])->field('id,truename')->find() : null;
        $issue=count($rows)>1 ? '代理配置重复，请重新指定' : ($rows && !$proxy ? '原代理已失效，请重新指定' : '');
        $approver=$rows ? (!$issue ? $proxy : null) : $manager;
        return ['departmentId'=>(int)$department['id'],'departmentName'=>$department['title'],
            'managerCount'=>count($managers),'managerId'=>$manager ? (int)$manager['id'] : 0,'managerName'=>$manager['truename'] ?? '',
            'proxyId'=>$proxyId,'proxyName'=>$proxy['truename'] ?? '','approverId'=>$approver ? (int)$approver['id'] : 0,
            'approverName'=>$approver['truename'] ?? '','issue'=>$issue ?: (!$approver ? '待指定' : ''),
            'snapshot'=>[$department,$managers,$rows]];
    }
}
