package org.dromara.ems.common.web;

import org.dromara.common.core.domain.R;
import org.dromara.common.core.utils.ServletUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.web.core.BaseController;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Collections;
import java.util.List;

/**
 * EMS 内部控制器基类。
 * 这里只做最薄的一层适配，把老控制器常用能力接到项目现有工具类上。
 */
public class EmsBaseController extends BaseController {

    protected final Logger logger = LoggerFactory.getLogger(getClass());

    protected void startPage() {
        // EMS 旧控制器仍保留了 startPage 入口，这里留空并交由 getDataTable 读取请求参数做分页。
    }

    protected <T> R<T> success(T data) {
        return R.ok(data);
    }

    protected R<Void> error(String message) {
        return R.fail(message);
    }

    protected String getUsername() {
        return LoginHelper.getUsername();
    }

    protected <T> TableDataInfo<T> getDataTable(List<T> list) {
        List<T> safeList = list == null ? Collections.emptyList() : list;
        Integer pageNum = parseInt(ServletUtils.getParameter("pageNum"), 1);
        Integer pageSize = parseInt(ServletUtils.getParameter("pageSize"), Integer.MAX_VALUE);
        int fromIndex = Math.min((pageNum - 1) * pageSize, safeList.size());
        int toIndex = Math.min(fromIndex + pageSize, safeList.size());
        return new TableDataInfo<>(safeList.subList(fromIndex, toIndex), safeList.size());
    }

    private Integer parseInt(String value, Integer defaultValue) {
        try {
            return value == null ? defaultValue : Integer.parseInt(value);
        } catch (NumberFormatException ignored) {
            // 兼容旧前端分页参数偶发脏值，避免直接把整个接口打挂。
            return defaultValue;
        }
    }
}
