package com.product.mobile.core.controller;

import com.alibaba.druid.util.StringUtils;
import com.product.core.config.CoreConst;
import com.product.core.controller.support.AbstractBaseController;
import com.product.core.entity.FieldSetEntity;
import com.product.core.entity.RequestParameterEntity;
import com.product.core.exception.BaseException;
import com.product.core.spring.context.SpringMVCContextHolder;
import com.product.mobile.core.config.MobileCoreCode;
import com.product.mobile.core.config.MobileCoreConst;
import com.product.mobile.core.service.ide.INavBarManagerService;
import com.product.module.sys.version.ApiVersion;
import com.product.util.BaseUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

/**
 * @Author cheng
 * @Date 2022/2/22 15:59
 * @Desc 瀵艰埅鏍忕鐞�
 */
@RestController
@RequestMapping("/api/nav-bar")
public class NavBarManagerController extends AbstractBaseController {


    @Autowired
    INavBarManagerService navBarManagerService;

    /**
     * 瀵艰埅閰嶇疆鍒楄〃
     *
     * @param request
     * @return
     */
    @PostMapping("/list-config/{version}")
    @ApiVersion(1)
    public String listConfig(HttpServletRequest request) {
        try {
            FieldSetEntity fse = null;
            Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
            if (bean != null) {
                RequestParameterEntity reqp = (RequestParameterEntity) bean;
                fse = reqp.getFormData();
            }
            if (bean == null || fse == null) {
                SpringMVCContextHolder.getSystemLogger().error(MobileCoreCode.SYSTEM_FORM_NODATA.getValue(), MobileCoreCode.SYSTEM_FORM_NODATA.getText());
                return this.error(MobileCoreCode.SYSTEM_FORM_NODATA.getValue(), MobileCoreCode.SYSTEM_FORM_NODATA.getText());
            }
            if (fse.getTableName() == null || !MobileCoreConst.TABLE_NAV_BAR.equals(fse.getTableName())) {
                SpringMVCContextHolder.getSystemLogger().error(MobileCoreCode.SYSTEM_TABLE_NODATA.getValue(), MobileCoreCode.SYSTEM_TABLE_NODATA.getText());
                return this.error(MobileCoreCode.SYSTEM_TABLE_NODATA.getValue(), MobileCoreCode.SYSTEM_TABLE_NODATA.getText());
            }
            // 鍒ゆ柇鍒嗛〉鍙傛暟鏄惁姝e父
            if (StringUtils.isEmpty(fse.getString(MobileCoreConst.PAGESIZE))
                    || StringUtils.isEmpty(fse.getString(MobileCoreConst.CPAGE))) {
                SpringMVCContextHolder.getSystemLogger().error(MobileCoreCode.SYSTEM_FORM_COUNT.getValue(), MobileCoreCode.SYSTEM_FORM_COUNT.getText());
                return this.error(MobileCoreCode.SYSTEM_FORM_COUNT.getValue(), MobileCoreCode.SYSTEM_FORM_COUNT.getText());
            }
            return OK_List(navBarManagerService.listConfig(fse));
        } catch (BaseException e) {
            e.printStackTrace();
            return error(e);
        } catch (Exception e) {
            e.printStackTrace();
            return error(MobileCoreCode.GET_NAV_BAR_CONFIG_LIST_FAIL);
        }
    }

    /**
     * 瀵艰埅閰嶇疆璇︽儏
     *
     * @param request
     * @return
     */
    @PostMapping("/find-config/{version}")
    @ApiVersion(1)
    public String findConfig(HttpServletRequest request) {
        try {
            FieldSetEntity fse = null;
            Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
            if (bean != null) {
                RequestParameterEntity reqp = (RequestParameterEntity) bean;
                fse = reqp.getFormData();
            }
            if (bean == null || fse == null) {
                SpringMVCContextHolder.getSystemLogger().error(MobileCoreCode.SYSTEM_FORM_NODATA.getValue(), MobileCoreCode.SYSTEM_FORM_NODATA.getText());
                return this.error(MobileCoreCode.SYSTEM_FORM_NODATA.getValue(), MobileCoreCode.SYSTEM_FORM_NODATA.getText());
            }
            if (fse.getTableName() == null || !MobileCoreConst.TABLE_NAV_BAR.equals(fse.getTableName())) {
                SpringMVCContextHolder.getSystemLogger().error(MobileCoreCode.SYSTEM_TABLE_NODATA.getValue(), MobileCoreCode.SYSTEM_TABLE_NODATA.getText());
                return this.error(MobileCoreCode.SYSTEM_TABLE_NODATA.getValue(), MobileCoreCode.SYSTEM_TABLE_NODATA.getText());
            }
            // 鍒ゆ柇鍙傛暟鏄惁姝e父
            if (StringUtils.isEmpty(fse.getString(MobileCoreConst.MODULE_CATEGORY))) {
                SpringMVCContextHolder.getSystemLogger().error(MobileCoreCode.SYSTEM_FORM_COUNT.getValue(), MobileCoreCode.SYSTEM_FORM_COUNT.getText());
                return this.error(MobileCoreCode.SYSTEM_FORM_COUNT.getValue(), MobileCoreCode.SYSTEM_FORM_COUNT.getText());
            }
            return OK_List(navBarManagerService.findConfig(fse));
        } catch (BaseException e) {
            e.printStackTrace();
            return error(e);
        } catch (Exception e) {
            e.printStackTrace();
            return error(MobileCoreCode.FIND_NAV_BAR_CONFIG_FAIL);
        }
    }

    /**
     * 瀵艰埅閰嶇疆淇濆瓨
     *
     * @param request
     * @return
     */
    @PostMapping("/save-config/{version}")
    @ApiVersion(1)
    public String saveConfig(HttpServletRequest request) {
        try {
            FieldSetEntity fse = null;
            Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
            if (bean != null) {
                RequestParameterEntity reqp = (RequestParameterEntity) bean;
                fse = reqp.getFormData();
            }
            if (bean == null || fse == null) {
                SpringMVCContextHolder.getSystemLogger().error(MobileCoreCode.SYSTEM_FORM_NODATA.getValue(), MobileCoreCode.SYSTEM_FORM_NODATA.getText());
                return this.error(MobileCoreCode.SYSTEM_FORM_NODATA.getValue(), MobileCoreCode.SYSTEM_FORM_NODATA.getText());
            }
            if (fse.getTableName() == null || !MobileCoreConst.TABLE_NAV_BAR.equals(fse.getTableName())) {
                SpringMVCContextHolder.getSystemLogger().error(MobileCoreCode.SYSTEM_TABLE_NODATA.getValue(), MobileCoreCode.SYSTEM_TABLE_NODATA.getText());
                return this.error(MobileCoreCode.SYSTEM_TABLE_NODATA.getValue(), MobileCoreCode.SYSTEM_TABLE_NODATA.getText());
            }
            INavBarManagerService navBarManagerService = (INavBarManagerService) getProxyInstance(this.navBarManagerService);
            navBarManagerService.saveConfig(fse);
            return OK();
        } catch (BaseException e) {
            e.printStackTrace();
            return error(e);
        } catch (Exception e) {
            e.printStackTrace();
            return error(MobileCoreCode.SAVE_NAV_BAR_CONFIG_FAIL);
        }
    }

    /**
     * 瀵艰埅閰嶇疆鍒犻櫎
     *
     * @param request
     * @return
     */
    @PostMapping("/del-config/{version}")
    @ApiVersion(1)
    public String delConfig(HttpServletRequest request) {
        try {
            FieldSetEntity fse = null;
            Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
            if (bean != null) {
                RequestParameterEntity reqp = (RequestParameterEntity) bean;
                fse = reqp.getFormData();
            }
            if (bean == null || fse == null) {
                SpringMVCContextHolder.getSystemLogger().error(MobileCoreCode.SYSTEM_FORM_NODATA.getValue(), MobileCoreCode.SYSTEM_FORM_NODATA.getText());
                return this.error(MobileCoreCode.SYSTEM_FORM_NODATA.getValue(), MobileCoreCode.SYSTEM_FORM_NODATA.getText());
            }
            if (fse.getTableName() == null || !MobileCoreConst.TABLE_NAV_BAR.equals(fse.getTableName())) {
                SpringMVCContextHolder.getSystemLogger().error(MobileCoreCode.SYSTEM_TABLE_NODATA.getValue(), MobileCoreCode.SYSTEM_TABLE_NODATA.getText());
                return this.error(MobileCoreCode.SYSTEM_TABLE_NODATA.getValue(), MobileCoreCode.SYSTEM_TABLE_NODATA.getText());
            }
            if (StringUtils.isEmpty(fse.getString(MobileCoreConst.MODULE_CATEGORY))) {
                SpringMVCContextHolder.getSystemLogger().error(MobileCoreCode.SYSTEM_FORM_COUNT.getValue(), MobileCoreCode.SYSTEM_FORM_COUNT.getText());
                return this.error(MobileCoreCode.SYSTEM_FORM_COUNT.getValue(), MobileCoreCode.SYSTEM_FORM_COUNT.getText());
            }
            INavBarManagerService navBarManagerService = (INavBarManagerService) getProxyInstance(this.navBarManagerService);
            navBarManagerService.delConfig(fse);
            return OK();
        } catch (BaseException e) {
            e.printStackTrace();
            return error(e);
        } catch (Exception e) {
            e.printStackTrace();
            return error(MobileCoreCode.DEL_NAV_BAR_CONFIG_FAIL);
        }
    }

    /**
     * 瀵艰埅鏍忔爲 鐢ㄤ簬 绉诲姩绔�
     *
     * @return
     */
    @PostMapping("/mobile/get-nav-bar-tree/{version}")
    @ApiVersion(1)
    public String getNavBarTree() {
        try {
            return BaseUtil.success(navBarManagerService.getNarBarTree());
        } catch (BaseException e) {
            e.printStackTrace();
            return error(e);
        } catch (Exception e) {
            e.printStackTrace();
            return error(MobileCoreCode.GET_NAV_BAR_TREE_LIST_FAIL);
        }
    }
    /**
     * 璁惧绠$悊
     * 瀵艰埅鏍忔爲 鐢ㄤ簬 绉诲姩绔� 
     *
     * @return
     */
    @PostMapping("/mobile/device-nav-bar-tree/{version}")
    @ApiVersion(1)
    public String getDeviceNavBarTree() {
        try {
            return BaseUtil.success(navBarManagerService.getNarBarTree());
        } catch (BaseException e) {
            e.printStackTrace();
            return error(e);
        } catch (Exception e) {
            e.printStackTrace();
            return error(MobileCoreCode.GET_NAV_BAR_TREE_LIST_FAIL);
        }
    }
}