<?php

namespace App\Repositories;


use Symfony\Component\HttpKernel\Exception\HttpException;
use App\Models\ConfigPickupNode;
use Dingo\Api\Http\Response;
use Illuminate\Support\Facades\DB;
use Illuminate\Database\QueryException;

class ConfigPickupNodeRepository {
    public function __construct(ConfigPickupNode $configPickupNode) {

        $this->configPickupNode = $configPickupNode;
    }
    //列表
    public function index($request)
    {
        $perPage = isset($request['per_page']) ? $request['per_page'] : env('PER_PAGE');
        $where = [];
        if(isset($request['id'])){
            $where[] = ['id', '=', $request['id']];
        }

        if(isset($request['name'])){
            $where[] = ['name', 'like', "%{$request['name']}%"];

        }

        if(isset($request['city_id'])){
            $where[] = ['city_id', '=', $request['city_id']];
        }

        if(isset($request['status'])){
            $where[] = ['status', '=', $request['status']];
        }
        return $this->configPickupNode->where($where)->paginate($perPage);

    }

    /**
     * 添加自提点
     */
    public function create($request)
    {
        if($this->configPickupNode->where('name', trim($request['name']))->exists()){
            throw new HttpException(500, '该自提点已经存在');
        }

        $data = [
            'name' => $request['name'],
            'city_id' => $request['city_id'],
            'city_name' => $request['city_name'],
            'address' => $request['address'],
            'work_time' => $request['work_time'],
            'manager_name' => $request['manager_name']??'',
            'manager_mobile' => $request['manager_mobile'],
            'receive_type' => $request['receive_type'],
            'longitude' => $request['longitude'],
            'latitude' => $request['latitude'],
            'store_ids' => $request['store_ids'],
            'pickup_group_id' => $request['pickup_group_id'],
            'pickup_code' => $request['pickup_code'],
            'status' => 1
        ];

        if (!$this->configPickupNode->create($data)) {
            throw new HttpException(500, '添加失败');
        }
    }

    public function edit($request)
    {
        $pickupNode = $this->configPickupNode->where('id', $request['id'])->first();

        $pickupNode->name = $request['name'];
        $pickupNode->city_id = $request['city_id'];
        $pickupNode->city_name = $request['city_name'];
        $pickupNode->address = $request['address'];
        $pickupNode->work_time = $request['work_time'];
        $pickupNode->manager_name = $request['manager_name']??'';
        $pickupNode->manager_mobile = $request['manager_mobile'];
        $pickupNode->receive_type = $request['receive_type'];
        $pickupNode->longitude = $request['longitude'];
        $pickupNode->latitude = $request['latitude'];
        $pickupNode->store_ids = $request['store_ids'];
        $pickupNode->pickup_group_id = $request['pickup_group_id'];
        $pickupNode->status = $request['status']?$request['status']:0;

        DB::beginTransaction();
        try{
            $res = $pickupNode->save();

            if($res){
                DB::commit();
                return Response::create();
            }
            DB::rollBack();
            return Response::create([
                'message'  => '编辑失败,请重试',
                'status_code'   => 500
            ]);

        }catch (QueryException $exception){
            DB::rollBack();
            return Response::create([
                'message'  => '编辑失败,请重试',
                'error' => $exception->getMessage(),
                'status_code'   => 500
            ]);
        }
    }

}