package org.xyzh.common.core.domain;
import java.io.Serializable;
import java.util.List;

import org.springframework.http.HttpStatus;
import org.xyzh.common.core.page.PageDomain;
import org.xyzh.common.core.page.PageParam;

/**
 * @description    ResultDomain.java文件描述 统一返回结果实体类
 * @filename    ResultDomain.java
 * @author    yslg
 * @copyright xyzh
 * @since 2025-09-07
 */
public class ResultDomain<T> implements Serializable{

    private static final long serialVersionUID = 1L;

    /**
     * @description    状态码
     * @author    yslg
     * @since 2025-09-07
     */
    private int code;

    /**
     * @description    返回消息
     * @author    yslg
     * @since 2025-09-07
     */
    private String message;

    /**
     * @description    操作是否成功
     * @author    yslg
     * @since 2025-09-07
     */
    private boolean success;
    
    /**
     * @description    是否登录
     * @author    yslg
     * @since 2025-09-07
     */
    private boolean login;

    /**
     * @description    是否有权限
     * @author    yslg
     * @since 2025-09-07
     */
    private boolean auth;

    /**
     * @description    返回数据
     * @author    yslg
     * @since 2025-09-07
     */
    private T data;

    /**
     * @description    返回数据列表
     * @author    yslg
     * @since 2025-09-07
     */
    private List<T> dataList;

    /**
     * @description    分页参数
     * @author    yslg
     * @since 2025-09-07
     */
    private PageParam pageParam;

    /**
     * @description    分页信息
     * @author    yslg
     * @since 2025-09-07
     */
    private PageDomain<T> pageDomain;

    public ResultDomain() {
    }

    public ResultDomain(int code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    public ResultDomain(int code, String message, List<T> dataList) {
        this.code = code;
        this.message = message;
        this.dataList = dataList;
    }
    public ResultDomain(int code, String message, PageDomain<T> pageDomain) {
        this.code = code;
        this.message = message;
        this.pageDomain = pageDomain;
        this.pageParam = pageDomain.getPageParam();
        this.dataList = pageDomain.getDataList();
    }

    /**
     * @description    获取状态码
     * @return    int 状态码
     * @author    yslg
     * @since 2025-09-07
     */
    public int getCode() {
        return code;
    }

    /**
     * @description    设置状态码
     * @param    code 状态码
     * @return    void
     * @author    yslg
     * @since 2025-09-07
     */
    public void setCode(int code) {
        this.code = code;
    }

    /**
     * @description    获取返回消息
     * @return    String 返回消息
     * @author    yslg
     * @since 2025-09-07
     */
    public String getMessage() {
        return message;
    }

    /**
     * @description    设置返回消息
     * @param    message 返回消息
     * @return    void
     * @author    yslg
     * @since 2025-09-07
     */
    public void setMessage(String message) {
        this.message = message;
    }

    /**
     * @description    获取数据
     * @return    T 数据
     * @author    yslg
     * @since 2025-09-07
     */
    public T getData() {
        return data;
    }

    /**
     * @description    设置数据
     * @param    data 数据
     * @return    void
     * @author    yslg
     * @since 2025-09-07
     */
    public void setData(T data) {
        this.data = data;
    }

    /**
     * @description    获取数据列表
     * @return    List<T> 数据列表
     * @author    yslg
     * @since 2025-09-07
     */
    public List<T> getDataList() {
        return dataList;
    }

    /**
     * @description    设置数据列表
     * @param    dataList 数据列表
     * @return    void
     * @author    yslg
     * @since 2025-09-07
     */
    public void setDataList(List<T> dataList) {
        this.dataList = dataList;
    }

    /**
     * @description    获取分页参数
     * @return    PageParam 分页参数
     * @author    yslg
     * @since 2025-09-07
     */
    public PageParam getPageParam() {
        return pageParam;
    }

    /**
     * @description    设置分页参数
     * @param    pageParam 分页参数
     * @return    void
     * @author    yslg
     * @since 2025-09-07
     */
    public void setPageParam(PageParam pageParam) {
        this.pageParam = pageParam;
    }
    
    /**
     * @description    获取分页信息
     * @return    PageDomain<T> 分页信息
     * @author    yslg
     * @since 2025-09-07
     */
    public PageDomain<T> getPageDomain() {
        return pageDomain;
    }

    /**
     * @description    设置分页信息
     * @param    pageDomain 分页信息
     * @return    void
     * @author    yslg
     * @since 2025-09-07
     */
    public void setPageDomain(PageDomain<T> pageDomain) {
        this.pageDomain = pageDomain;
    }

    /**
     * @description    获取成功标志
     * @return    boolean 成功标志
     * @author    yslg
     * @since 2025-09-07
     */
    public boolean isSuccess() {
        return success;
    }

    /**
     * @description    设置成功标志
     * @param    success 成功标志
     * @return    void
     * @author    yslg
     * @since 2025-09-07
     */
    public void setSuccess(boolean success) {
        this.success = success;
    }

    /**
     * @description    获取登录标志
     * @return    boolean 登录标志
     * @author    yslg
     * @since 2025-09-07
     */
    public boolean isLogin() {
        return login;
    }

    /**
     * @description    设置登录标志
     * @param    login 登录标志
     * @return    void
     * @author    yslg
     * @since 2025-09-07
     */
    public void setLogin(boolean login) {
        this.login = login;
    }

    /**
     * @description    获取权限标志
     * @return    boolean 权限标志
     * @author    yslg
     * @since 2025-09-07
     */
    public boolean isAuth() {
        return auth;
    }

    /**
     * @description    设置权限标志
     * @param    auth 权限标志
     * @return    void
     * @author    yslg
     * @since 2025-09-07
     */
    public void setAuth(boolean auth) {
        this.auth = auth;
    }

    /**
     * @description    操作成功
     * @param    message 返回消息
     * @param    data 返回数据
     * @author    yslg
     * @since 2025-09-07
     */
    public void success(String message, T data) {
        this.code = HttpStatus.OK.value();
        this.message = message;
        this.success = true;
        this.auth = true;
        this.login = true;
        this.data = data;
    }

    /**
     * @description    操作成功
     * @param    message 返回消息
     * @param    dataList 返回数据列表
     * @author    yslg
     * @since 2025-09-07
     */
    public void success(String message, List<T> dataList) {
        this.code = HttpStatus.OK.value();
        this.message = message;
        this.success = true;
        this.auth = true;
        this.login = true;
        this.dataList = dataList;
    }

    /**
     * @description    操作成功
     * @param    message 返回消息
     * @param    pageDomain 返回分页信息
     * @author    yslg
     * @since 2025-09-07
     */
    public void success(String message, PageDomain<T> pageDomain) {
        this.code = HttpStatus.OK.value();
        this.message = message;
        this.success = true;
        this.auth = true;
        this.login = true;
        this.pageDomain = pageDomain;
        this.pageParam = pageDomain.getPageParam();
        this.dataList = pageDomain.getDataList();
    }

    /**
     * @description    操作失败
     * @param    message 返回消息
     * @author    yslg
     * @since 2025-09-07
     */
    public void fail(String message) {
        this.code = HttpStatus.BAD_REQUEST.value();
        this.message = message;
        this.success = false;
        this.auth = true;
        this.login = true;
        this.data = null;
    }

    /**
     * @description    操作失败
     * @param    code 状态码
     * @param    message 返回消息
     * @author    yslg
     * @since 2025-09-07
     */
    public void fail(int code, String message) {
        this.code = code;
        this.message = message;
        this.success = false;
        this.auth = true;
        this.login = true;
        this.data = null;
    }

    /**
     * @description    未登录
     * @param    message 返回消息
     * @author    yslg
     * @since 2025-09-07
     */
    public void noLogin(String message) {
        this.code = HttpStatus.UNAUTHORIZED.value();
        this.message = message;
        this.success = false;
        this.auth = false;
        this.login = false;
        this.data = null;
    }

    /**
     * @description    无权限
     * @param    message 返回消息
     * @author    yslg
     * @since 2025-09-07
     */
    public void noAuth(String message) {
        this.code = HttpStatus.FORBIDDEN.value();
        this.message = message;
        this.success = false;
        this.auth = false;
        this.login = true;
        this.data = null;
    }
}
