<?php

namespace App\Console\Commands\Transfer;

use App\Models\Admin\AdminUser;
use App\Models\CompanyConsultant;
use App\Models\ComplaintConsultant;
use App\Transfer\Consultant;
use App\Transfer\ConsultantComplaint;
use App\Transfer\Member;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;

class TransferConsultant extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'aix:transfer-consultant';
    
    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = '转移旧系统顾问数据';
    
    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }
    
    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $this->info("清除顾问数据表:consultant");
        DB::delete("delete from consultant");
        $this->info("清除企业顾问数据表:company_consultant");
        DB::delete("delete from company_consultant");
        $this->info("清除顾问消息数据表:complaint_consultant");
        DB::delete("delete from complaint_consultant");
        
        $this->info("开始转移企业顾问数据...");
        $total = Member::where('utype', 1)->count();
        $bar = $this->output->createProgressBar($total);
        
        Member::where('utype', 1)->orderBy('uid','asc')->chunk(500, function ($members) use($bar) {
            $member_array=[];
            foreach ($members as $member){
                $this->handleMember($member, $member_array);
            }
            if ($member_array){
                CompanyConsultant::insert($member_array);
            }
            $bar->advance(500);
        });
        $bar->finish();
        $this->line('完成!');
        
        
        $this->info('开始转移顾问数据...');
        $total = Consultant::count();
        $bar = $this->output->createProgressBar($total);
        
        Consultant::orderBy('id','asc')->chunk(500, function ($Consultants) use ($bar) {
            $consultant_array=[];
            foreach ($Consultants as $consultant){
                $this->handleConsultant($consultant, $consultant_array);
            }
            if($consultant_array){
                \App\Models\Consultant::insert($consultant_array);
            }
            $bar->advance(500);
        });
        $bar->finish();
        $this->line('完成!');
        
        
        $this->info('开始转移顾问消息数据...');
        $total = ConsultantComplaint::count();
        $bar = $this->output->createProgressBar($total);
        ConsultantComplaint::orderBy('id', 'asc')->chunk(500,function ($consultantComplaints) use ($bar){
            $consultantComplaint_array=[];
            foreach ($consultantComplaints as $consultantComplaint){
                $this->handleConsultantComplaint($consultantComplaint, $consultantComplaint_array);
            }
            if($consultantComplaint_array){
                ComplaintConsultant::insert($consultantComplaint_array);
            }
            $bar->advance(500);
        });
        $bar->finish();
        $this->line('完成!');
        $this->info('转移顾问数据成功!');
    }
    
    public function handleMember($member, &$member_array)
    {
        if($member->consultant){
            $data['consultant_id'] = $member->consultant;
            $data['company_id'] = $member->uid;
            $data['admin_users_id'] = $member->consultants ? $member->consultants->adminid : 0;
            $data['consultant_name'] = $member->consultants ? $member->consultants->name : '';
            $data['created_at'] = date('Y-m-d H:i:s', $member->reg_time);
            $data['updated_at'] = date('Y-m-d H:i:s', $member->reg_time);
            $member_array[] = $data;
        }
    }
    
    public function handleConsultant($consultant, &$consultant_array)
    {
        $data['id']=$consultant->id;
        $data['name']=$consultant->name;
        $data['mobile']=$consultant->mobile;
        $data['telephone']=$consultant->tel;
        $data['qq']=$consultant->qq;
        $data['admin_users_id']=$consultant->adminid;
        $data['avatar']='old/avatar/'.$consultant->pic;
        $consultant_array[]= $data;
    }
    
    public function handleConsultantComplaint($consultantComplaint, &$consultantComplaint_array)
    {
        $data['uid']=$consultantComplaint->uid;
        $data['consultant_id']=$consultantComplaint->consultant_id;
        if($consultantComplaint->audit==1){
            $audit = 0;
        }elseif ($consultantComplaint->audit==2){
            $audit = 1;
        }else{
            $audit = 2;
        }
        $data['status']=$audit;
        $data['notes']=$consultantComplaint->notes;
        $data['created_at']=date('Y-m-d H:i:s', $consultantComplaint->addtime);
        $data['updated_at']=date('Y-m-d H:i:s', $consultantComplaint->addtime);
        $consultantComplaint_array[]= $data;
    }
    
}