<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Model\OrderModel;
use App\Model\UserMainModel;
use App\Model\UserCompanyModel;
use App\Model\OrderActionLogModel;
use App\Model\PayLogModel;
use DB;
use Excel;
use Log;

class SpecialController extends Controller
{
    // 订单特殊处理,用于测试调整运费
    public function changeOrderPrice(Request $request)
    {
        $mobile = $request->input('mobile', '');
        $order_id = $request->input('order_id', '');

        if (!$mobile || !$order_id) {
            echo '参数缺失';die;
        }

        // 检查是否为测试账号
        $test_mobile = Config('params.test_mobile');

        if (!in_array($mobile, $test_mobile)) {
            echo '非测试账号';die;
        }

        DB::connection('order')->beginTransaction();

        $order = DB::connection('order')->table('lie_order_price')->where('order_id', $order_id)->where('price_type', 3)->first();

        if (!$order) {
            echo '运费不存在';die;
        }

        $data['price'] = 0;
        $update = DB::connection('order')->table('lie_order_price')->where('order_id', $order_id)->where('price_type', 3)->update($data);

        if (!$update) {
            DB::connection('order')->rollback();
            echo '运费更新失败';die;
        }

        $OrderModel = new OrderModel();
        $order_info = $OrderModel->find($order_id);

        $intracode = DB::table('lie_intracode')->where('user_id', $order_info['user_id'])->select('admin_id')->first();
        $sale_id = $intracode ? $intracode->admin_id : 0;

        // 操作记录
        $OrderActionLogModel = new OrderActionLogModel();
        $actionLog = $OrderActionLogModel->addLog($order_id, $sale_id, 2, '调整运费为0');

        if (!$actionLog) {
            DB::connection('order')->rollback();
            echo '添加运费更新日志失败';die;
        }

        DB::connection('order')->commit();

        echo '运费更新成功';
    }

    // 导出已离职人员数据 (业务ID、业务人、关联会员账号、公司名称)
    public function exportDimission() 
    {
        // 查找已离职人员
        $dimission = DB::table('user_info')->where('status', 4)->select('userId', 'name')->get();

        if (empty($dimission)) {
            echo '无离职人员';die;
        } 

        $sales = [];
        $sale_ids = [];

        foreach ($dimission as $v) {
            $sales[$v->userId] = $v->name;
            $sale_ids[] = $v->userId;
        }

        // 查找离职人员订单
        $OrderModel = new OrderModel();
        $order_info = $OrderModel->from('lie_order as o')
                        ->leftJoin('lie_user_main as u', 'o.user_id', '=', 'u.user_id')
                        ->leftJoin('lie_user_company as c', 'o.user_id', '=', 'c.user_id')
                        ->whereIn('o.sale_id', $sale_ids)
                        ->select('o.order_id', 'o.user_id', 'o.sale_id', 'u.mobile', 'u.email', 'c.com_name')
                        ->get();

        if (empty($order_info)) {
            echo '无离职人员订单';die;
        }

        $cellData = [];
        
        foreach ($order_info as $k=>$v) {
            $cellData[$k]['sale_id'] = $v['sale_id'];
            $cellData[$k]['sale_name'] = $sales[$v['sale_id']];
            $cellData[$k]['account'] = $v['mobile'] ? $v['mobile'] : $v['email'];
            $cellData[$k]['com_name'] = $v['com_name'];
        }

        $headerCell = ['业务ID', '业务员名称', '关联会员账号', '公司名称'];

        array_unshift($cellData, $headerCell);

        $fileName = '已离职人员关联客户'.date('_YmdHis');

        Excel::create($fileName, function($excel) use ($cellData){
            $excel->sheet('人员导出', function($sheet) use ($cellData){
                $sheet->rows($cellData);
            });
        })->export('xls');
    }

    // 导入离职业务客户
    public function importDimission(Request $request)
    {
        if ($request->isMethod('post')) {
            $file = $_FILES['file']; // $request->file('file')
            $filePath = $file['tmp_name']; // 临时路径

            // 获取导入内容
            $excel = [];
            Excel::load($filePath, function($reader) use(&$excel){
                $data = $reader->getSheet(0); // 读取第二个sheet
                $excel = $data->toArray();
            });

            if (!$excel) {
                echo '导入文件为空';die;
            }  

            array_shift($excel); // 删除第一行

            $OrderModel = new OrderModel();      

            // 记录到日志
            $monolog = Log::getMonolog();
            $monolog->popHandler();
            Log::useDailyFiles(storage_path('logs/updateOrder.log'));

            foreach ($excel as $k=>$v) {
                if (!$v[0] || !$v[1]) continue;

                // 1. 根据手机或邮箱查找客户最近的订单
                $order_id = $this->getLastOrderId(trim($v[0]));

                if ($order_id === false) {
                    Log::info('客户账号:'.$v[0].',客服邮箱:'.$v[1].',客户无订单');
                    continue;
                } 

                // 2. 根据企业邮箱查找sale_id
                $sale_id = $this->getSaleId(trim(strtolower($v[1])));

                if ($sale_id === false) {
                    Log::info('客户账号:'.$v[0].',客服邮箱:'.$v[1].',没有找到跟进人邮箱');
                    continue;
                }

                // 3. 替换第一步的订单sale_id 
                $OrderModel->where('order_id', $order_id)->update(['sale_id' => $sale_id]);

                Log::info('客户账号:'.$v[0].',客服邮箱:'.$v[1].',替换已离职人员的订单,订单ID:'.$order_id.',之前的SALE ID:'.$sale_id);
            }

            echo '替换sale_id完成';die;
        }

        return view('importDimission');
    }

    // 获取客户最近的订单
    public function getLastOrderId($account)
    {
        $UserMainModel    = new UserMainModel();
        $UserCompanyModel = new UserCompanyModel();
        $OrderModel       = new OrderModel();

        if (strpos($account, '@') !== false) { // 邮箱
            $where['email'] = strtolower($account);
            $user_info = $UserMainModel->where($where)->select('user_id')->first();
        } else if (preg_match('/\d{11}/', $account)) { // 手机号码
            $where['mobile'] = $account;
            $user_info = $UserMainModel->where($where)->select('user_id')->first();
        } else { // 公司名称
            $user_info = $UserCompanyModel->where('com_name', $account)->select('user_id')->first();
        }   
        
        if (!$user_info) return false;

        // 查找最近的订单
        $order = $OrderModel->where('user_id', $user_info['user_id'])->where('is_type', 0)->select('order_id')->orderBy('order_id', 'desc')->first();

        if (!$order) return false;

        return $order['order_id'];
    }

    // 获取后台业务ID
    public function getSaleId($email)
    {
        $user = DB::table('user_info')->where('email', $email)->select('userId')->first();

        if (!$user) return false;

        return $user->userId;
    }

    // 处理支付记录
    public function handlePayLog()
    {
        $PayLogModel = new PayLogModel();
        $pay_log = $PayLogModel->where('pay_type', 4)->where('is_paid', -1)->orderBy('create_time', 'desc')->get()->toArray();

        $data = [];

        foreach ($pay_log as $k=>$v) {
            $log = $PayLogModel->where('order_id', $v['order_id'])->where('pay_type', 1)->first();

            if (!$log) 
                continue;
            
            // dump($log['order_id'].'==='.date('Y-m-d H:i:s', $log['create_time']).'==='.date('Y-m-d H:i:s', $log['pay_time']));    
                   
            // $PayLogModel->where('pay_log_id', $v['pay_log_id'])->update(['is_paid'=>1, 'pay_time'=>$log['pay_time']]); // 更新账期支付
            // $PayLogModel->where('pay_log_id', $log['pay_log_id'])->delete();

            // // 记录到日志
            // $monolog = Log::getMonolog();
            // $monolog->popHandler();
            // Log::useDailyFiles(storage_path('logs/update_pay_log.log'));
            // Log::info('更新账期支付记录ID:'.$v['pay_log_id'].',删除的支付记录ID:'.$log['pay_log_id']);

            $data[] = $log['pay_log_id'];
        }
dd($data);
    }

}