<?php
namespace app\mobile\controller;

use think\facade\Db;
use app\mobile\service\KeyTraining;
use app\mobile\service\MobileFeatureAccess;

class OmsKeyTraining extends OmsBase
{
    private function admin($a)
    {
        return !empty($a['admin_id'])?Db::name('admin_user')->where(['id'=>$a['admin_id'],'username'=>$a['username'],'status'=>1])->find():null;
    }
    private function leader($a)
    {
        $admin=$this->admin($a);
        return $admin && ((int)$admin['job']===9 || Db::name('team_list')->where('aid',$admin['id'])->count()>0);
    }
    private function allow($a,$feature)
    {
        if(!MobileFeatureAccess::allows($feature,MobileFeatureAccess::context($a)))$this->fail('当前账号没有此功能权限',403);
    }
    private function run($method,$action)
    {
        return $this->guarded(function()use($method,$action){$this->requireMethod($method);$a=$this->current();try{$s=new KeyTraining();return json(['code'=>0,'message'=>'成功','data'=>$action($s,$a)]);}catch(\think\exception\HttpResponseException $e){throw $e;}catch(\RuntimeException $e){$this->fail($e->getMessage(),422);}});
    }
    public function options(){return $this->run('GET',function($s,$a){$o=$s->options();return ['skills'=>$o['skills'],'canApply'=>(bool)$this->leader($a),'canTeach'=>(bool)$this->admin($a),'username'=>$a['username'],'server_time'=>$s->now()];});}
    public function employee(){return $this->run('GET',function($s,$a){$this->allow($a,'training-apply');if(!$this->leader($a))$this->fail('仅班长可为员工报名',403);return $s->employee($this->request->get('username'));});}
    public function register(){return $this->run('POST',function($s,$a){$this->allow($a,'training-apply');if(!$this->leader($a))$this->fail('仅班长可为员工报名',403);return ['id'=>$s->register($this->request->post('username'),$this->request->post('skill_id'),(int)$a['admin_id'])];});}
    public function records(){return $this->run('GET',function($s,$a){$scope=$this->request->get('scope','apply');
        if($scope==='apply'){$this->allow($a,'training-apply');if(!$this->leader($a))$this->fail('仅班长可查看本人报名',403);return $s->registrations($this->request->get(),(int)$a['admin_id']);}
        if($scope!=='mine')$this->fail('查询范围不正确');$this->allow($a,'training-mine');return $s->registrations($this->request->get(),null,$a['username']);
    });}
    public function detail(){return $this->run('GET',function($s,$a){$r=$s->registration($this->request->get('id'));
        if($r['username']===$a['username'])$this->allow($a,'training-mine');
        elseif($this->leader($a)&&(int)$r['applicant_admin_id']===(int)$a['admin_id'])$this->allow($a,'training-apply');else $this->fail('不能查看他人报名',403);
        return $s->registrationDetail($r['id']);
    });}
    public function courses(){return $this->run('GET',function($s,$a){$this->allow($a,'training-teach');$admin=$this->admin($a);if(!$admin)$this->fail('需要有效讲师身份',403);return $s->teacherCourses((int)$admin['id'],$this->request->get('page',1));});}
    public function course(){return $this->run('GET',function($s,$a){$this->allow($a,'training-teach');$c=$s->courseDetail($this->request->get('id'));if(!$this->admin($a)||(int)$c['admin_id']!==(int)$a['admin_id'])$this->fail('只能查看本人授课',403);return $c;});}
    public function sign(){return $this->run('POST',function($s,$a){$this->allow($a,'training-teach');if(!$this->admin($a))$this->fail('需要讲师身份',403);$s->sign($this->request->post('id'),(int)$a['admin_id']);return null;});}
    public function confirm(){return $this->run('POST',function($s,$a){$this->allow($a,'training-teach');if(!$this->admin($a))$this->fail('需要讲师身份',403);$s->confirmCourse($this->request->post('id'),$this->request->post('people'),(int)$a['admin_id']);return null;});}
    public function rate(){return $this->run('POST',function($s,$a){$this->allow($a,'training-mine');$s->rate($this->request->post('id'),$a['username'],$this->request->post('feedback_items'));return null;});}
}


