<?php

namespace App\Admin\Controllers\Api;

use App\Admin\Controllers\BaseController;
use App\Admin\Service\OrderService;
use App\Exceptions\InvalidRequestException;
use App\Http\Utils\ValidatorMsg;
use App\Models\Increasid;
use App\Models\Order;
use App\Models\OrderAddress;
use App\Models\OrderReturnItems;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Arr;
use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Support\Facades\Validator;


class OrderApiController extends BaseController
{
    
    public function orderDownloadShow(Request $request){

        $params = $request->all();
        $type = arrayGet($params, "type");

        $order_id = 1;
        $orderAddressList = OrderService::getOrderAddress($order_id);
        $orderAddressList = arrayChangeKeyByField($orderAddressList,"order_address_type");
//        dump($orderAddressList);
        $info["sn"] = OrderService::getSn($type);
        if(empty($info["sn"])){
            abort(500, '获取编码失败');
        }


        $info["orderList"] = OrderService::getOrderList($order_id);
        if($type == "1"){
            //PI
            return view('export.order_contract_PI',[
                "ship"=>$orderAddressList[1]??[],
                "bill"=>$orderAddressList[2]??[],
                "info"=>$info
                ]);
        }elseif($type == "2"){
            //CI
            return view('export.order_contract_CI',[
                "ship"=>$orderAddressList[1]??[],
                "bill"=>$orderAddressList[2]??[],
                "info"=>$info
            ]);
        }else{
            //PL
            return view('export.order_contract_PL',[
                "ship"=>$orderAddressList[1]??[],
                "bill"=>$orderAddressList[2]??[],
                "info"=>$info
            ]);
        }

    }


    public function orderList(Request $request){

        $params = request()->all();
        $order_id = arrayGet($params,"order_id",0,"intval");

        $orderInfo = Order::getOneAndRelationList($order_id);
        $orderItems = $orderInfo["order_items"]??[];
        $orderInfo["orderItemList"] = $orderItems;
        foreach($orderInfo["orderItemList"] as $k=>$item){
            $orderInfo["orderItemList"][$k]["goods_price_format"] = decimal_number_format_usd($item["goods_price"]);
            $orderInfo["orderItemList"][$k]["total_amount"] = decimal_number_format($item["goods_price"]*$item["goods_number"]);
            $orderInfo["orderItemList"][$k]["total_amount_format"] = decimal_number_format_usd($item["goods_price"]*$item["goods_number"]);
            $returnItems = OrderReturnItems::getOrderReturnItem($item["rec_id"]);
            $orderInfo["orderItemList"][$k]["return_num"] = $returnItems["return_num"] ?? "";
            $orderInfo["orderItemList"][$k]["return_price"] = $returnItems["return_price"] ?? "";
            $orderInfo["orderItemList"][$k]["return_amount"] = $returnItems["return_amount"] ?? "";
            $orderInfo["orderItemList"][$k]["type"] = $returnItems["type"] ?? "";
            $orderInfo["orderItemList"][$k]["type_cn"] = Arr::get(OrderReturnItems::$TYPE,$returnItems["type"] ?? 0,"");
        }


        return response()->json(["code"=>0,"msg"=>"ok","data"=>["list"=>$orderInfo["orderItemList"]],"count"=>count($orderInfo["orderItemList"] )]);
    }


    //订单明细修改
    public function orderDownload(Request $request){

        $params = $request->all();
        $type = arrayGet($params, "type");

        $order_id = 1;
        $orderAddressList = OrderService::getOrderAddress($order_id);
        $orderAddressList = arrayChangeKeyByField($orderAddressList,"order_address_type");
        $info["sn"] = OrderService::getSn($type);
        if(empty($info["sn"])){
            abort(500, '获取编码失败');
        }

        $info["orderList"] = OrderService::getOrderList($order_id);

        return Excel::download(new \App\Exports\ContractExport([
            "ship"=>$orderAddressList[1]??[],
            "bill"=>$orderAddressList[2]??[],
            "info"=>$info
        ]),'PI.xlsx');
    }


    //订单明细修改
    public function  editOrderItems(Request $request){
        $params = $request->all();
        $order_id = arrayGet($params,"order_id",0,"intval");
        $orderItems = arrayGet($params,"order_items","","trim");
        $validator = Validator::make($params, [
            'order_id' => 'required',
            'order_items.*.order_items_id' => 'required',
            'order_items' => 'required',
        ], [
            'order_id.required' => admin_trans("order.validator.order_id_required"),
            'order_items.required' => admin_trans("order.validator.order_items_required"),
        ], [

//            'order_id' => '订单id',
//            'order_items' => '订单明细',
        ]);
        if ($validator->fails()) {
            $errors = $validator->errors()->toArray();
            $err_msg = ValidatorMsg::getMsg($errors);
            throw new InvalidRequestException($err_msg);
        }

        OrderService::editOrderItems($order_id,$orderItems);
        return $this->setSuccess();
    }


}