package com.simuwang.manage.api.base;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.simuwang.base.common.conts.HttpStatus;
import com.simuwang.base.common.page.PageDomain;
import com.simuwang.base.common.page.TableDataInfo;
import com.simuwang.base.common.page.TableSupport;
import com.simuwang.base.common.result.AjaxResult;
import com.simuwang.base.common.util.DateUtils;
import com.simuwang.base.common.util.PageUtils;
import com.simuwang.base.common.util.SqlUtil;
import com.simuwang.base.common.util.StringUtil;
import com.smppw.common.pojo.enums.status.ResultCode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;

import java.beans.PropertyEditorSupport;
import java.util.Date;
import java.util.List;

/**
 * FileName: BaseController
 * Author:   chenjianhua
 * Date:     2024/9/8 10:02
 * Description: ${DESCRIPTION}
 */
public class BaseController {
        protected final Logger logger = LoggerFactory.getLogger(this.getClass());

        /**
         * 将前台传递过来的日期格式的字符串，自动转化为Date类型
         */
        @InitBinder
        public void initBinder(WebDataBinder binder)
        {
            // Date 类型转换
            binder.registerCustomEditor(Date.class, new PropertyEditorSupport()
            {
                @Override
                public void setAsText(String text)
                {
                    setValue(DateUtils.parseDate(text));
                }
            });
        }

        /**
         * 设置请求分页数据
         */
        protected void startPage()
        {
            PageUtils.startPage();
        }

        /**
         * 设置请求排序数据
         */
        protected void startOrderBy()
        {
            PageDomain pageDomain = TableSupport.buildPageRequest();
            if (StringUtil.isNotEmpty(pageDomain.getOrderBy()))
            {
                String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
                PageHelper.orderBy(orderBy);
            }
        }

        /**
         * 清理分页的线程变量
         */
        protected void clearPage()
        {
            PageUtils.clearPage();
        }

        /**
         * 响应请求分页数据
         */
        @SuppressWarnings({ "rawtypes", "unchecked" })
        protected TableDataInfo getDataTable(List<?> list)
        {
            TableDataInfo rspData = new TableDataInfo();
            rspData.setCode(HttpStatus.SUCCESS);
            rspData.setMsg(null);
            rspData.setRows(list);
            rspData.setTotal(new PageInfo(list).getTotal());
            return rspData;
        }

    /**
     * 响应返回结果
     *
     * @param rows 影响行数
     * @return 操作结果
     */
    protected AjaxResult toAjax(int rows)
    {
        return rows > 0 ? success() : error();
    }

    /**
     * 响应返回结果
     *
     * @param result 结果
     * @return 操作结果
     */
    protected AjaxResult toAjax(boolean result)
    {
        return result ? success() : error();
    }

    /**
     * 返回成功
     */
    public AjaxResult success()
    {
        return AjaxResult.success();
    }

    /**
     * 返回失败消息
     */
    public AjaxResult error()
    {
        return AjaxResult.error();
    }

    /**
     * 返回成功消息
     */
    public AjaxResult success(String message)
    {
        return AjaxResult.success(message);
    }

    /**
     * 返回成功数据
     */
    public static AjaxResult success(Object data)
    {
        return AjaxResult.success("操作成功", data);
    }

    /**
     * 返回失败消息
     */
    public AjaxResult error(String message)
    {
        return AjaxResult.error(message);
    }

    /**
     * 返回错误码消息
     */
    public AjaxResult error(AjaxResult.Type type, String message)
    {
        return new AjaxResult(type, message);
    }

}
