<?php

namespace app\controller;

use app\model\Customer;
use app\util\Util;
use config\constants\Constants;
use support\Log;
use support\Request;

class CustomerController
{

    /**
     * 客户分级
     * @param Request $request
     * @return \support\Response
     */
    public function getGrade(Request $request)
    {
        $grade = [];
        foreach (Constants::GRADE as $key => $value) {
            $grade[] = [
                'status' => $key,
                'text' => $value,
            ];
        }
        return json($grade);
    }

    /**
     * 客户偏好
     * @param Request $request
     * @return \support\Response
     */
    public function getCarType(Request $request)
    {
        $grade = [];
        foreach (Constants::GRADE as $key => $value) {
            $grade[] = [
                'status' => $key,
                'text' => $value,
            ];
        }
        return json($grade);
    }

    /**
     * 客户列表
     * @param Request $request
     * @return \support\Response
     */
    public function list(Request $request)
    {

        $page = $request->input('page', 1);
        $perPage = $request->input('per_page', 10);

        $where = [];

        $userId = $request->user['id'];
        if (Util::isEmpty($userId)) {
            return Util::fail(['user_id' => $userId], trans('user_none'));
        }
        if ($request->user['role'] != 1) {
            $where['user_id'] = $userId;
        }

        // 执行分页查询
        $data = Customer::where($where)
            ->orderBy('id', 'desc')
            ->paginate($perPage, ['*'], 'page', $page);

        foreach ($data->items() as &$value) {
            $value = Customer::getCustomer($value);
        }

        return Util::page($data);
    }

    /**
     * 客户详情
     * @param Request $request
     * @return \support\Response
     */
    public function detail(Request $request)
    {
        $id = Util::getParam($request, 'id');
        if (Util::isEmpty($id)) {
            return Util::fail([], 'id' . trans('not_null'));
        }

        $res = Customer::select('id', 'user_id', 'grade', 'channel_id','car_type_id', 'country_id', 'magnitude', 'email', 'phone', 'WhatsApp', 'contacts', 'describe')
            ->where('id', $id)
            ->first();
        if ($res) {
            $res->toArray();
        } else {
            return Util::fail([], '记录不存在');
        }

        $res = Customer::getCustomer($res);

        return Util::success($res);
    }

    /**
     * 客户录入
     * @param Request $request
     * @return \support\Response
     */
    public function save(Request $request)
    {
        $id = Util::getParam($request, 'id');
        $channel_id = Util::getParam($request, 'channel_id');
        if (Util::isEmpty($channel_id)) {
            return Util::fail([], 'channel_id' . trans('not_null'));
        }
        $country_id = Util::getParam($request, 'country_id');
        if (Util::isEmpty($country_id)) {
//            return Util::fail([],'country_id'.trans('not_null'));
        }
        $car_type_id = Util::getParam($request, 'car_type_id');
        if (Util::isEmpty($car_type_id)) {
            return Util::fail([], 'car_type_id' . trans('not_null'));
        }
        $contacts = Util::getParam($request, 'contacts');
        $email = Util::getParam($request, 'email');
        $phone = Util::getParam($request, 'phone');
        if (Util::isEmpty($contacts) && Util::isEmpty($email) && Util::isEmpty($phone)) {
            return Util::fail([], 'country_id' . trans('not_null'));
        }

        $data = [
            'user_id' => $request->user['id'],
            'grade' => Util::getParam($request, 'grade', 0),
            'channel_id' => $channel_id,
            'country_id' => $country_id,
            'car_type_id' => $car_type_id,
            'magnitude' => Util::getParam($request, 'magnitude', 0),
            'email' => $email,
            'phone' => $phone,
            'WhatsApp' => Util::getParam($request, 'WhatsApp',''),
            'contacts' => $contacts,
            'describe' => Util::getParam($request, 'describe'),
            'lat' => Util::getParam($request, 'lat',0),
            'lng' => Util::getParam($request, 'lng',0),
            'address' => Util::getParam($request, 'address',''),
        ];

        if (Util::isEmpty($id)) {
            $res = Customer::create($data);
        } else {
            $res = Customer::where('id', $id)
                ->update($data);
//            Log::info('update', ['res' => $res]);
            (!$res)?: $res=Customer::find($id)->toArray();
        }

        if ($res) {
            return Util::success($res);
        } else {
            return Util::fail($res);
        }
    }

}