<?php
namespace app\api\controller\h5;

use app\hander\HelpHander;
use think\facade\Request;
use think\Db;

class VisitorOrder extends Base
{
    // 获取我的预约记录
    public function list(){
        $lists = Db::name('visitor_order')
            ->field('id,org_id,status,service_id,service_time_id,name,phone')
            ->where('user_id',$this->userId)
            ->where('del',0)
            ->whereIn('type',[1,2])
            ->select();

        foreach ($lists as $k=>$v){
            $lists[$k]['org_name'] = Db::name('org')->where('id',$v['org_id'])->value('name');
            $lists[$k]['title'] = '';
            $lists[$k]['day'] = '';
            $lists[$k]['start'] = '';
            $lists[$k]['end'] = '';
            if($v['service_time_id'] > 0){
                $time = Db::name('service_time')->where('id',$v['service_time_id'])->find();
                $lists[$k]['day'] = $time?$time['day']:'';
                $lists[$k]['start'] = date('H:i',strtotime($time['day'].' '.$time['start']));
                $lists[$k]['end'] = date('H:i',strtotime($time['day'].' '.$time['end']));
                $lists[$k]['title'] = Db::name('service')->where('id',$v['service_id'])->value('title');
                $v = $this->autoCheck($v,$time);
                $lists[$k]['status'] = $v['status'];
            }
            $lists[$k]['qrcode'] = Request::domain().'/admin/Qrcode/qrcode?code='.get_qrcode_str('visitor',$v['id']);
        }
        HelpHander::success($lists);
    }

    // 获取我的预约记录--小程序
    public function list2(){
        $type = input('type/d',0);
        if(!in_array($type,[0,1,2])){
            HelpHander::error('参数错误');
        }
        $map[] = ['del','=',0];
        $map[] = ['user_id','=',$this->userId];
        if($type==1){
            $map[] = ['status','=',0];
        }else if($type==2){
            $map[] = ['status','in',[1,4]];
        }
        $lists = Db::name('visitor_order')->where($map)->select();
        $lists = $lists?$lists:[];
        foreach ($lists as $k=>$v){
            $lists[$k]['org_name'] = Db::name('org')->where('id',$v['org_id'])->value('name');
            $lists[$k]['from_user_name'] = Db::name('user')->where('id',$v['from_user_id'])->value('real_name');
            $lists[$k]['qrcode'] = Request::domain().'/admin/Qrcode/qrcode?code='.get_qrcode_str('visitor',$v['id']);
        }
        HelpHander::success($lists);
    }

    // 提交确认
    public function order(){
        $type = input('type');
        $serviceTimeId = input('serviceTimeId',0);
        $name = input('name','','trim');
        $phone = input('phone','','trim');
        if(!in_array($type,[1,2])){
           HelpHander::error('参数错误');
        }
        if($type == 1 && $serviceTimeId <= 0){
            HelpHander::error('未选择预约时间');
        }
        if(!$name){
          HelpHander::error('请填写姓名');
        }
        if(!check_mobile($phone)){
           HelpHander::error('手机号格式不正确');
        }
        $data = [
            'name' => $name,
            'phone' => $phone,
            'org_id' => $this->orgId,
            'user_id' => $this->userId,
            'status' => 0,
            'type' => $type,
            'create_time' => date('Y-m-d H:i:s')
        ];

        if($type == 1){
            $service = Db::name('service_time')
                ->alias('st')
                ->join('service s','s.id = st.service_id')
                ->where('st.id',$serviceTimeId)
                ->where('s.enable',1)
                ->where('s.del',0)
                ->where('st.enable',1)
                ->where('st.del',0)
                ->find();

            if(!$service){
                HelpHander::error('该服务已关闭');
            }

            // 检查时间段是否已过
            $endTime = strtotime($service['day'].' '.$service['end']);

            if(time() >= $endTime){
                 HelpHander::error('该时间段已过,无法预约');
            }

            // 检查是否还有名额
            $count = Db::name('visitor_order')
                ->where('service_time_id',$serviceTimeId)
                ->whereIn('status',[0,1,2,3])
                ->where('del',0)
                ->count();
            if($service['limit'] <= $count){
                HelpHander::error('该时间段已无预约名额');
            }

            // 检查用户是否已预约改时间段
            $ret = Db::name('visitor_order')
                ->where('user_id',$this->userId)
                ->where('service_time_id',$serviceTimeId)
                ->whereIn('status',[0,1,2,3])
                ->where('del',0)
                ->find();
            if($ret){
                HelpHander::error('已预约该时段,无重复预约');
            }

            $data['service_id'] = $service['service_id'];
            $data['service_time_id'] = $serviceTimeId;
        }
        $add = Db::name('visitor_order')->insert($data);
        if ($add) {
            HelpHander::success([],'提交成功');
        }else{
            HelpHander::error('提交失败');
        }
    }

    // 提交确认--小程序
    public function order2(){
        $type = 3;
        $company = input('company','','trim');
        $name = input('name','','trim');
        $phone = input('phone','','trim');
        $plateSn = input('plateSn','','trim');
        $bookTime = input('bookTime','','trim');
        $content = input('content','','trim');
        $fromUserId = input('fromUserId/d',0);

        if(!$fromUserId){
            HelpHander::error('参数错误');
        }
        if($fromUserId == $this->userId){
            HelpHander::error('不能填写自己分享的预约单');
        }

        if(!$company){
            HelpHander::error('请填写单位');
        }
        if(!$name){
            HelpHander::error('请填写姓名');
        }
        if(!check_mobile($phone)){
            HelpHander::error('手机号格式不正确');
        }
        if(!$bookTime){
            HelpHander::error('请选择到访时间');
        }
        if(!$content){
            HelpHander::error('请填写到访事由');
        }
        $data = [
            'name' => $name,
            'phone' => $phone,
            'org_id' => $this->orgId,
            'user_id' => $this->userId,
            'from_user_id' => $fromUserId,
            'status' => 0,
            'type' => $type,
            'create_time' => date('Y-m-d H:i:s'),
            'book_time' => $bookTime,
            'plate_sn' => $plateSn,
            'company' => $company,
            'content' => $content
        ];

        $ret = Db::name('visitor_order')->insert($data);
        if ($ret) {
            HelpHander::success([],'提交成功');
        }else{
            HelpHander::error('提交失败');
        }
    }

    public function detail(){
        $id = input('id/d',0);
        $info = Db::name('visitor_order')->where('id',$id)->where('del',0)->find();
        if($info){
            $info['ORG_NAME'] = Db::name('org')->where('id',$info['org_id'])->value('name');
            $info['from_user_name'] = Db::name('user')->where('id',$info['from_user_id'])->value('real_name');
            $info['qrcode'] = Request::domain().'/admin/Qrcode/qrcode?code='.get_qrcode_str('visitor',$info['id']);
        }else{
            HelpHander::error('记录不存在');
        }
        HelpHander::success($info);
    }

    // 自动检测预约已失效
    private function autoCheck($info,$time){
        if($info['status'] == 1){
            $curTime = time();
            $endTime = strtotime($time['day'].' '.$time['end']);
            if($curTime >= $endTime){
                Db::name('visitor_order')->where('id',$info['id'])->update(['status'=>3]);
                $info['status'] = 3;
            }
        }
        return $info;
    }


}