package com.yeqifu.bus.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeqifu.bus.entity.Customer;
import com.yeqifu.bus.service.ICustomerService;
import com.yeqifu.bus.vo.CustomerVo;
import com.yeqifu.sys.common.Constast;
import com.yeqifu.sys.common.DataGridView;
import com.yeqifu.sys.common.ResultObj;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * <p>
 * InnoDB free: 9216 kB 前端客户控制器
 * </p>
 *
 * @author luoyi-
 * @since 2019-12-05
 * * 该类是一个 Restful 风格的控制器，用于处理与客户相关的业务操作，如查询、添加、修改、删除和加载下拉列表等
 */
@RestController
@RequestMapping("/customer")
public class CustomerController {

    @Autowired
    private ICustomerService customerService;

    /**
     * 查询所有的客户
     * @param customerVo 包含查询条件的客户值对象，如分页信息、客户名称、联系人、电话等
     * @return DataGridView 包含分页数据和总记录数的数据视图对象
     */
    @RequestMapping("loadAllCustomer")
    public DataGridView loadAllCustomer(CustomerVo customerVo){
        //1.声明一个分页page对象，根据传入的 customerVo 中的页码和每页记录数进行初始化
        IPage<Customer> page = new Page<Customer>(customerVo.getPage(),customerVo.getLimit());
        //2.声明一个queryWrapper，用于构建查询条件
        QueryWrapper<Customer> queryWrapper = new QueryWrapper<Customer>();
        // 当客户名称不为空时，添加客户名称的模糊查询条件
        queryWrapper.like(StringUtils.isNotBlank(customerVo.getCustomername()),"customername",customerVo.getCustomername());
        // 当联系人不为空时，添加联系人的模糊查询条件
        queryWrapper.like(StringUtils.isNotBlank(customerVo.getConnectionpersion()),"connectionpersion",customerVo.getConnectionpersion());
        // 当电话不为空时，添加电话的模糊查询条件
        queryWrapper.like(StringUtils.isNotBlank(customerVo.getPhone()),"phone",customerVo.getPhone());
        // 调用服务层进行分页查询操作
        customerService.page(page,queryWrapper);
        // 将查询结果封装到 DataGridView 中并返回，包含总记录数和当前页的记录
        return new DataGridView(page.getTotal(),page.getRecords());
    }

    /**
     * 添加一个客户
     * @param customerVo 要添加的客户信息
     * @return 操作结果对象，指示添加操作是否成功
     */
    @RequestMapping("addCustomer")
    public ResultObj addCustomer(CustomerVo customerVo){
        try {
            // 调用服务层的保存方法，将客户信息保存到数据库
            customerService.save(customerVo);
            // 如果保存成功，返回添加成功的结果对象
            return ResultObj.ADD_SUCCESS;
        } catch (Exception e) {
            // 打印异常信息，方便调试
            e.printStackTrace();
            // 如果保存失败，返回添加失败的结果对象
            return ResultObj.ADD_ERROR;
        }
    }

    /**
     * 修改一个客户
     * @param customerVo 要修改的客户信息
     * @return 操作结果对象，指示修改操作是否成功
     */
    @RequestMapping("updateCustomer")
    public ResultObj updateCustomer(CustomerVo customerVo){
        try {
            // 调用服务层的更新方法，根据客户 ID 更新客户信息
            customerService.updateById(customerVo);
            // 如果更新成功，返回更新成功的结果对象
            return ResultObj.UPDATE_SUCCESS;
        } catch (Exception e) {
            // 打印异常信息，方便调试
            e.printStackTrace();
            // 如果更新失败，返回更新失败的结果对象
            return ResultObj.UPDATE_ERROR;
        }
    }

    /**
     * 删除一个客户
     * @param id 客户的 ID
     * @return 操作结果对象，指示删除操作是否成功
     */
    @ApiOperation(value = "删除一个客户",notes = "删除一个客户")
    @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "客户ID",required = true,paramType = "query",dataType = "Integer")})
    @RequestMapping(value = "deleteCustomer",method = RequestMethod.DELETE)
    public ResultObj deleteCustomer(Integer id){
        try {
            // 调用服务层的删除方法，根据客户 ID 删除客户
            customerService.deleteCustomerById(id);
            // 如果删除成功，返回删除成功的结果对象
            return ResultObj.DELETE_SUCCESS;
        } catch (Exception e) {
            // 打印异常信息，方便调试
            e.printStackTrace();
            // 如果删除失败，返回删除失败的结果对象
            return ResultObj.DELETE_ERROR;
        }
    }


    /**
     * 加载所有客户的下拉列表
     * @return DataGridView 包含符合条件的客户列表的数据视图对象
     */
    @RequestMapping("loadAllCustomerForSelect")
    public DataGridView loadAllCustomerForSelect(){
        // 创建一个查询包装器，用于构建查询条件
        QueryWrapper<Customer> queryWrapper = new QueryWrapper<Customer>();
        // 查询条件为 available 字段等于可用状态常量
        queryWrapper.eq("available", Constast.AVAILABLE_TRUE);
        // 调用服务层的查询方法，获取满足条件的客户列表
        List<Customer> list = customerService.list(queryWrapper);
        // 将查询结果封装到 DataGridView 中并返回
        return new DataGridView(list);
    }

}

