<?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\OrderActionLogModel;
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();

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

                if ($order_id === false) continue;

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

                if ($sale_id === false) continue;

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

                // 记录到日志
                $monolog = Log::getMonolog();
                $monolog->popHandler();
                Log::useDailyFiles(storage_path('logs/updateOrder.log'));
                Log::info('替换已离职人员的订单,订单ID:'.$order_id.',之前的SALE ID:'.$sale_id);
            }

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

        return view('importDimission');
    }

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

        if (strpos($account, '@') === false) {
            $where['mobile'] = $account;
        } else {
            $where['email'] = strtolower($account);
        }

        $user = $UserMainModel->where($where)->select('user_id')->first();
        
        if (!$user) return false;

        // 查找最近的订单
        $order = $OrderModel->where('user_id', $user['user_id'])->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;
    }

}