<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Model\OrderModel;
use App\Model\OrderRefundModel;
use App\Model\OrderRefundItemsModel;
use DB;
use App\Http\Page;
use App\Model\UserMainModel;

// 获取会员账号
function getAccountName($user_id)
{
    if (!$user_id) return false;

    $userMainModel = new UserMainModel;

    $user = $userMainModel->find($user_id);

    if (!$user) return false;

    return $user->mobile ? $user->mobile : $user->email;
}

// 获取订单金额
function getOrderAmount($order_id)
{
    if (!$order_id) return false;

    $OrderModel = new OrderModel;

    $order = $OrderModel->find($order_id);

    if (!$order) return false;

    return $order->order_amount;
}

// 获取支付名称
function getPayName($order_id) 
{
    $payLog = DB::connection('order')
            ->table('lie_pay_log')
            ->where(['order_id' => $order_id])
            ->select('pay_name')
            ->get();

    if (!empty($payLog)) {
        foreach ($payLog as $v) {
            $payName[] = $v->pay_name; 
        }

        return implode(',', $payName);
    }

    return false;
}

class RefundController extends Controller
{
    // 页面用户、菜单信息
    public function getPageInfo(Request $request)
    {
        $uri = '/' . $request->path();

        if ($request->path() == '/') $uri = '/list';           

        $username = $request->user->email;
        $useremail= $request->user->email;

        // 菜单
        $menuconfig = DB::table('config')->where('config_title', '订单系统')->first();
        $menus = [];
        if ($menuconfig && !($menus = json_decode($menuconfig->config_data)))
            $menus = [];

        $perm = new PermController;

        // 用户角色
        $role = $perm->getUserRole($request);

        // 获取权限菜单
        if ($role != 1) {
            $menus = $perm->getPermMenu($menus, $request->user->userId);   
        }

        $userPerms = $perm->getUserAllPerms($request->user->userId, $role); // 用户权限

        $data = [
            'header'    => $request->user->header,
            'uri'       => $uri,
            'username'  => $username,
            'useremail' => $useremail,
            'menus'     => $menus,
            'userPerms' => $userPerms,
            'role'      => $role,
        ];

        return $data;
    }

    // 联营退款列表
    public function jointRefundList(Request $request) 
    {
        $info = $this->refundList($request, 1);   

        return view('refundlist', $info);
    }

    // 自营退款列表
    public function selfRefundList(Request $request) 
    {
        $info = $this->refundList($request, 2);

        return view('refundlist', $info);
    }

    // 退款申请列表
    public function refundList(Request $request, $type)
    {
        $info = $this->getPageInfo($request);
        $info['title'] = $type == 1 ? '联营退款申请列表' : '自营退款申请列表';     

        $map['order_sn']     = $request->input('order_sn', '');
        $map['sku_name']     = $request->input('sku_name', '');
        $map['order_payment_mode'] = $request->input('order_payment_mode', '');
        $map['apply_status'] = $request->input('apply_status', '');
        $map['time_start']   = $request->input('time_start', '');
        $map['time_end']     = $request->input('time_end', '');
        $map['order_goods_type'] = $type; // 类型

        //获取订单列表
        $url = Config('website.api_domain').'refund/getRefundOrderList';

        $data['k1']  = time();
        $data['k2']  = md5(md5($data['k1']).'fh6y5t4rr351d2c3bryi');
        $data['p']   = $request->input('p', 1); // 当前页码
        $data['size'] = 10; // 当前页条数
        $data['map'] = $map;

        $response = json_decode(curlApi($url, $data), true); 

        // 分页
        $page = new Page($response['data']['count'], 10);
        $page->setConfig('theme', '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% %HEADER%');
        $show = $page->show();

        $info['condition'] = $map; 
        $info['list']      = $response['data']['data'];  
        $info['count']     = $response['data']['count'];
        $info['page']      = $show; 

        return $info;
    }

    // 联营退款导出
    public function refundExport(Request $request)
    {
        $refundModel = new OrderRefundModel();
        return $refundModel->jointExport($request);
    }

    // 自营退款导出
    public function refundSelfExport(Request $request)
    {
        $refundModel = new OrderRefundModel();
        return $refundModel->selfExport($request);
    }

    // 退货详情
    public function refundDetails(Request $request, $id)
    {
        $info = $this->getPageInfo($request); 

        $OrderRefundModel = new OrderRefundModel();
        $info['refund'] = $OrderRefundModel->find($id);
        $info['refundItems'] = $OrderRefundModel->find($id)->hasManyRefundItems;

        if ($info['refund']['order_goods_type'] == 1) {
            $title = '联营订单';
            $refund_url = '/refund_order';
        } else {
            $title = '自营订单';
            $refund_url = '/refund_self_order';
        }

        $info['title'] = '订单退货详情';
        $info['paths'] = [["title" => $title, "href" => '#'], ["title" => '退款申请列表', "href" => $refund_url], ["title" => '订单退货详情', "href" => '#']];

        return view('refundDetails', $info);
    }

    // 钱包退款
    public function walletRefund(Request $request, $id)
    {
        // 获取退款单
        // $refund = DB::connection('order')->table('lie_order_refund')->where('refund_id', $id)->first();

        if (!$id) echo '未获取到退款单';

        $data['refund_id'] = $id;
        // $data['refund_amount'] = number_format($refund->pay_amount - $refund->price_fall, 2); // 最終退款金額
        $data['pay_code'] = 'unionpay';

        $url = Config('website.api_domain').'refund/recharge';

        $data['k1']  = time();
        $data['k2']  = md5(md5($data['k1']).'fh6y5t4rr351d2c3bryi');

        $temp = curlApi($url, $data, "POST");

        if (!$temp) echo '未获取到退款地址';

        echo $temp;
    }

    // 自营取消退款申请
    public function cancelSelfRefund(Request $request)
    {
        $refund_id = $request->input('refund_id');

        $update = DB::connection('order')->table('lie_order_refund')->where('refund_id', $refund_id)->update(['status' => -1]);

        if (!$update) return ['errcode' => 1, 'errmsg' => '取消申请失败'];

        return ['errcode' => 0, 'errmsg' => '取消申请成功'];
    }

}