<?php

namespace App\Http\Controllers\Api\Wechat;

use App\Http\Controllers\Api\ApiBaseController;
use App\Services\Common\WechatService;
use App\Wechat\Official\EventHandle;
use EasyWeChat\Kernel\Messages\Message;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;

class TestController extends ApiBaseController
{
    /**
     * @var WechatService
     */
    private $wechatService;

    /**
     * OfficialController constructor.
     * @param WechatService $wechatService
     */
    public function __construct(WechatService $wechatService)
    {
        $this->wechatService = $wechatService;
    }

    public function index()
    {
        $official = $this->wechatService->getOfficialAccount();
        $official->server->push(EventHandle::class, Message::EVENT);


        return $official->server->serve();
    }

    public function pushMenu()
    {
        $official = $this->wechatService->getOfficialAccount();
        $menu     = [
            [
                "name"       => "个人服务",
                "sub_button" => [
                    [
                        "type" => "click",
                        "name" => "刷新简历",
                        "key"  => "PersonResumeRefresh",
                    ],
                    [
                        "type" => "view",
                        "name" => "面试邀请",
                        "url"  => route('mobile.auth.thirdlogin.official')
                            . '?redirect_url=' . urlencode(route('mobile.person.jobs_interview')),
                    ],
                    [
                        "type" => "view",
                        "name" => "投递反馈",
                        "url"  => route('mobile.auth.thirdlogin.official')
                            . '?redirect_url=' . urlencode(route('mobile.person.apply_jobs')),
                    ],
                    [
                        "type" => "view",
                        "name" => "职位搜索",
                        "url"  => route('mobile.auth.thirdlogin.official')
                            . '?redirect_url=' . urlencode(route('mobile.jobs')),
                    ],
                    [
                        "type" => "view",
                        "name" => "个人中心",
                        "url"  => route('mobile.auth.thirdlogin.official')
                            . '?redirect_url=' . urlencode(route('mobile.person.index')),
                    ],
                ],
            ],
            [
                "name"       => "企业服务",
                "sub_button" => [
                    [
                        "type" => "click",
                        "name" => "刷新职位",
                        "key"  => "CompanyJobRefresh",
                    ],
                    [
                        "type" => "view",
                        "name" => "职位管理",
                        "url"  => route('mobile.auth.thirdlogin.official')
                            . '?redirect_url=' . urlencode(route('mobile.firm.jobs.list')),
                    ],
                    [
                        "type" => "view",
                        "name" => "应聘简历",
                        "url"  => route('mobile.auth.thirdlogin.official')
                            . '?redirect_url=' . urlencode(route('mobile.firm.resume.apply')),
                    ],
                    [
                        "type" => "view",
                        "name" => "简历搜索",
                        "url"  => route('mobile.auth.thirdlogin.official')
                            . '?redirect_url=' . urlencode(route('mobile.resumes')),
                    ],
                ],
            ],
            [
                "name"       => "更多精彩",
                "sub_button" => [
                    [
                        "type" => "click",
                        "name" => "每日签到",
                        "key"  => "EverydaySignIn",
                    ],
                    [
                        "type" => "view",
                        "name" => "账号绑定",
                        "url"  => route('mobile.auth.thirdlogin.official'),
                    ],
                    [
                        "type" => "view",
                        "name" => "最近招聘会",
                        "url"  => route('mobile.auth.thirdlogin.official')
                            . '?redirect_url=' . urlencode(route('mobile.jobfair.index')),
                    ],
                    [
                        "type" => "view",
                        "name" => "进入官网",
                        "url"  => route('mobile.home'),
                    ],
                ],
            ],
        ];
        $official->menu->create($menu);
    }

    public function importCompany()
    {
        $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader("Xls");  // 指定为xlsx格式

        $spreadsheet = $reader->load(public_path() . "/company.xls");

        $sheet = $spreadsheet->getActiveSheet();
        $res   = [];

        foreach ($sheet->getRowIterator(2) as $row) {
            $tmp = [];
            foreach ($row->getCellIterator() as $cell) {
                $tmp[] = trim($cell->getFormattedValue());
            }
            $res[$row->getRowIndex()] = $tmp;
        }

        foreach ($res as $v) {
            $this->_company($v);
        }

        return '成功';
    }

    private $_citys = [
        624 => '青阳街道',
        625 => '梅岭街道',
        626 => '西园街道',
        627 => '罗山街道',
        628 => '新塘街道',
        629 => '灵源街道',
        630 => '安海街道',
        631 => '磁灶镇',
        632 => '陈埭镇',
        633 => '池店镇',
        634 => '东石镇',
        635 => '内坑镇',
        636 => '深沪镇',
        637 => '金井镇',
        638 => '龙湖镇',
        639 => '永和镇',
        640 => '英林镇',
        641 => '紫帽镇',
        642 => '西滨镇',
        643 => '经济开发区',
    ];

    private function _company($v)
    {
        //公司信息
        $date       = date('Y-m-d H:i:s');
        $info       = [
            'username'              => $v[0],
            'mobile'                => $v[1],
            'mobile_audit'          => 1,
            'email'                 => $v[2],
            'reg_time'              => time(),
            'reg_ip'                => ip2long('127.0.0.1'),
            'reg_type'              => 1,
            'reg_source'            => 1,
            'reg_source_cn'         => '网页端',
            'companyname'           => $v[3],
            'password'              => Hash::make($v[4]),
            'nature'                => 54,
            'trade'                 => 45,
            'district'              => '623.' . $v[5],
            'district_cn'           => '晋江市/' . $this->_citys[$v[5]],
            'scale'                 => $v[6],
            'registered'            => $v[7] ?: 0,
            'address'               => $v[8],
            'contact'               => $v[3],
            'landline_tel'          => $v[10],
            'organization_code'     => $v[11],
            'contents'              => $v[3],
            'short_name'            => $v[3],
            'setmeal_id'            => 1,
            'setmeal_name'          => '免费会员',
            'audit'                 => 1,
            'map_open'              => 0,
            'robot'                 => 1,
            'short_desc'            => $v[3],
            'created_at'            => $date,
            'updated_at'            => $date,
            'certificate_img'       => 'company/certificate/JE0IhhkErSZ1Zofzmynl9FPitkOHmGzHuaTORFAr.png',
            'certificate_img_audit' => 1,
        ];
        $company_id = DB::table('companys')->insertGetId($info);

        //操作日志
        $log = [
            'log_uid'      => $company_id,
            'log_username' => $info['companyname'],
            'log_value'    => '注册成功',
            'log_ip'       => ip2long('127.0.0.1'),
            'log_address'  => '未知',
            'log_utype'    => 1,
            'log_source'   => '网页版',
            'type'         => 1000,
            'status'       => 1,
            'created_at'   => $date,
            'updated_at'   => $date,
        ];
        DB::table('members_logs')->insert($log);

        //任务表
        $task                 = [];
        $task_item            = [
            'uid'        => $company_id,
            'task_id'    => 17,
            'utype'      => 1,
            'points'     => 50,
            'once'       => 1,
            'created_at' => $date,
            'updated_at' => $date,
        ];
        $task[]               = $task_item;
        $task_item['task_id'] = 29;
        $task_item['points']  = 20;
        $task[]               = $task_item;
        $task_item['task_id'] = 27;
        $task_item['points']  = 50;
        $task[]               = $task_item;
        $task_item['task_id'] = 30;
        $task[]               = $task_item;
        DB::table('task_logs')->insert($task);

        //注册赠送套餐
        $members_setmeals = [
            'uid'                => $company_id,
            'utype'              => 1,
            'setmeal_id'         => 1,
            'setmeal_name'       => '免费会员',
            'jobs_meanwhile'     => 999,
            'refresh_jobs_free'  => 9999,
            'download_resume'    => 9999,
            'starttime'          => time(),
            'setmeal_img'        => 'admin/images/QQ截图20200107164132.png',
            'show_apply_contact' => 0,
            'created_at'         => $date,
            'updated_at'         => $date,
        ];
        DB::table('members_setmeals')->insert($members_setmeals);
        $members_setmeals_record = [
            'uid'                => $company_id,
            'setmeal_id'         => 1,
            'setmeal_name'       => '免费会员',
            'jobs_meanwhile'     => 999,
            'refresh_jobs_free'  => 9999,
            'download_resume'    => 9999,
            'starttime'          => time(),
            'show_apply_contact' => 0,
            'created_at'         => $date,
            'updated_at'         => $date,
        ];
        DB::table('members_setmeals_record')->insert($members_setmeals_record);
        $members_points = [
            'uid'        => $company_id,
            'utype'      => 1,
            'points'     => 170,
            'created_at' => $date,
            'updated_at' => $date,
        ];
        DB::table('members_points')->insert($members_points);
        $members_handsels                  = [];
        $members_handsels_item             = [
            'uid'        => $company_id,
            'utype'      => 1,
            'htype'      => 'reg',
            'htype_cn'   => '注册账号',
            'operate'    => 1,
            'points'     => 50,
            'created_at' => $date,
            'updated_at' => $date,
        ];
        $members_handsels[]                = $members_handsels_item;
        $members_handsels_item['htype']    = 'set_map';
        $members_handsels_item['htype_cn'] = '开通电子地图';
        $members_handsels_item['points']   = 20;
        $members_handsels[]                = $members_handsels_item;
        $members_handsels_item['htype']    = 'done_profile';
        $members_handsels_item['htype_cn'] = '完善企业资料';
        $members_handsels_item['points']   = 50;
        $members_handsels[]                = $members_handsels_item;
        $members_handsels_item['htype']    = 'license_audit';
        $members_handsels_item['htype_cn'] = '上传营业执照并通过认证';
        $members_handsels_item['points']   = 50;
        $members_handsels[]                = $members_handsels_item;
        DB::table('members_handsels')->insert($members_handsels);

        //增加审核记录
        $audit_reasons = [
            'type'       => 8,
            'status'     => 1,
            'type_id'    => $company_id,
            'audit_man'  => 'admin',
            'created_at' => $date,
            'updated_at' => $date,
        ];
        DB::table('audit_reasons')->insert($audit_reasons);

        //增加站内信
        $pms = [
            'utype'      => 1,
            'msgtype'    => 1,
            'msgfromuid' => 1,
            'msgfrom'    => 'admin',
            'msgtoname'  => $info['companyname'],
            'msgtouid'   => $company_id,
            'message'    => '企业通过审核【备注】',
            'started_at' => 0,
            'ended_at'   => 0,
            'new'        => 1,
            'created_at' => $date,
            'updated_at' => $date,
        ];
        DB::table('pms')->insert($pms);
    }

    public function importJob()
    {
        $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader("Xls");  // 指定为xlsx格式

        $spreadsheet = $reader->load(public_path() . "/job.xls");

        $sheet = $spreadsheet->getActiveSheet();
        $res   = [];

        foreach ($sheet->getRowIterator(2) as $row) {
            $tmp = [];
            foreach ($row->getCellIterator() as $cell) {
                $tmp[] = trim($cell->getFormattedValue());
            }
            $item = array_filter($tmp);
            if (!empty($item)) {
                $res[$row->getRowIndex()] = $tmp;
            }
        }

        foreach ($res as $v) {
            $this->_job($v);
        }

        return '成功';
    }

    private function _job($v)
    {
        //职位信息
        $date    = date('Y-m-d H:i:s');
        $company = DB::table('companys')->where('id', $v[0])->first();
        $company = json_decode(json_encode($company), true);
        $info    = [
            'valid'           => 1,
            'jobs_name'       => $v[1],
            'company_id'      => $company['id'],
            'company_name'    => $company['companyname'],
            'company_addtime' => $company['reg_time'],
            'company_audit'   => $company['audit'],
            'nature'          => $v[2],
            'sex'             => 0,
            'age'             => '-',
            'amount'          => $v[10],
            'topclass'        => $v[3],
            'category'        => $v[4],
            'subclass'        => $v[5],
            'trade'           => $company['trade'],
            'scale'           => $company['scale'],
            'district'        => '623.' . $v[6],
            'wage'            => $v[7],
            'wage_max'        => $v[9] ?: 0,
            'wage_min'        => $v[8] ?: 0,
            'jobs_content'    => $v[11],
            'deadline'        => 1644311483,
            'refresh_time'    => time(),
            'setmeal_id'      => 1,
            'setmeal_name'    => '免费会员',
            'audit'           => 1,
            'robot'           => 1,
            'created_at'      => $date,
            'updated_at'      => $date,
        ];
        $info    = array_filter($info);
        $job_id  = DB::table('jobs')->insertGetId($info);

        //记录套餐使用
        $members_setmeal_logs = [
            'log_uid'      => $company['id'],
            'log_utype'    => 1,
            'log_username' => $company['companyname'],
            'log_value'    => '发布了职位' . $info['jobs_name'],
            'log_ip'       => ip2long('127.0.0.1'),
            'log_address'  => '未知',
            'log_leave'    => 998,
            'log_source'   => '网页版',
            'created_at'   => $date,
            'updated_at'   => $date,
        ];
        $members_setmeal_logs = array_filter($members_setmeal_logs);
        DB::table('members_setmeal_logs')->insert($members_setmeal_logs);

        //分站
        $subsite_jobs = [
            'subsite_id' => 0,
            'jobs_id'    => $job_id,
            'created_at' => $date,
            'updated_at' => $date,
        ];
        $subsite_jobs = array_filter($subsite_jobs);
        DB::table('subsite_jobs')->insert($subsite_jobs);

        //添加联系人信息
        $jobs_contact = [
            'job_id'            => $job_id,
            'contact'           => $company['contact'],
            'telephone'         => $company['mobile'],
            'email'             => $company['email'],
            'landline_tel'      => $company['landline_tel'],
            'address'           => $company['address'],
            'contact_show'      => 1,
            'telephone_show'    => 1,
            'email_show'        => 1,
            'landline_tel_show' => 1,
            'created_at'        => $date,
            'updated_at'        => $date,
        ];
        $jobs_contact = array_filter($jobs_contact);
        DB::table('jobs_contacts')->insert($jobs_contact);

        //添加日志
        $members_log = [
            'log_uid'      => $company['id'],
            'log_username' => $company['companyname'],
            'log_value'    => '发布了职位(id:' . $job_id . ')',
            'log_ip'       => ip2long('127.0.0.1'),
            'log_address'  => '未知',
            'log_utype'    => 1,
            'log_source'   => '网页版',
            'subsite_id'   => 0,
            'type'         => 1002,
            'status'       => 1,
            'created_at'   => $date,
            'updated_at'   => $date,
        ];
        $members_log = array_filter($members_log);
        DB::table('members_logs')->insert($members_log);

        //增加审核记录
        $audit_reasons = [
            'type'       => 3,
            'status'     => 2,
            'type_id'    => $job_id,
            'audit_man'  => 'admin',
            'created_at' => $date,
            'updated_at' => $date,
        ];
        $audit_reasons = array_filter($audit_reasons);
        DB::table('audit_reasons')->insert($audit_reasons);

        //增加站内信
        $pms = [
            'utype'      => 1,
            'msgtype'    => 1,
            'msgfromuid' => 1,
            'msgfrom'    => 'admin',
            'msgtoname'  => $company['companyname'],
            'msgtouid'   => $company['id'],
            'message'    => '职位ID:' . $job_id . ',职位名称:' . $info['jobs_name'] . ',通过审核,【备注】',
            'started_at' => 0,
            'ended_at'   => 0,
            'new'        => 1,
            'created_at' => $date,
            'updated_at' => $date,
        ];
        $pms = array_filter($pms);
        DB::table('pms')->insert($pms);
    }

    public function importData()
    {
        $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader("Xlsx");  // 指定为xlsx格式

        $spreadsheet = $reader->load(public_path() . "/1.xlsx");

        $sheet = $spreadsheet->getActiveSheet();
        $res   = [];

        foreach ($sheet->getRowIterator(2) as $row) {
            $tmp = [];
            foreach ($row->getCellIterator() as $cell) {
                $tmp[] = trim($cell->getFormattedValue());
            }
            $item = array_filter($tmp);
            if (!empty($item)) {
                $res[$row->getRowIndex()] = $tmp;
            }
        }
        foreach ($res as $v) {
            $this->_dealData($v);
        }

        return '成功';
    }

    private function _dealData($v)
    {
        $arr = [
            'avatar'         => '头像',
            'idcard_just'    => '身份证正面',
            'idcard_back'    => '身份证反面',
            'graduate'       => '毕业证书',
            'degree'         => '学位证书',
            'el_degree'      => '学信网《教育部学历证书电子注册备案表》',
            'qualification1' => '职(执)业资格证书、专业技术资格(职务)证书扫描件1',
            'qualification2' => '职(执)业资格证书、专业技术资格(职务)证书扫描件2',
            'prove1'         => '工作经历证明1',
            'prove2'         => '工作经历证明2',
            'prove3'         => '工作经历证明3',
            'prove4'         => '工作经历证明4',
            'prove5'         => '工作经历证明5',
            'prove6'         => '工作经历证明6',
            'prove7'         => '工作经历证明7',
            'prove8'         => '工作经历证明8',
            'prove9'         => '工作经历证明9',
            'prove10'        => '工作经历证明10',
        ];

        $info = [
            'name'           => $v[0],
            'avatar'         => $v[3],
            'idcard_just'    => $v[28],
            'idcard_back'    => $v[29],
            'graduate'       => $v[31],
            'degree'         => $v[32],
            'el_degree'      => $v[33],
            'qualification1' => $v[34],
            'qualification2' => $v[35],
            'prove1'         => $v[36],
            'prove2'         => $v[37],
            'prove3'         => $v[38],
            'prove4'         => $v[39],
            'prove5'         => $v[40],
            'prove6'         => $v[41],
            'prove7'         => $v[42],
            'prove8'         => $v[43],
            'prove9'         => $v[44],
            'prove10'        => $v[45],
        ];

        $path = storage_path('a/' . $info['name']);
        foreach ($arr as $key => $value) {
            if (!empty($info[$key])) {
                $file_nane = $path . '/' . $value . '.png';
                file_put_contents($file_nane, file_get_contents($info[$key]));
            }
        }
    }
}