package com.simuwang.base.pojo.dos.sys;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.simuwang.base.common.support.dos.DataEntity;
import com.simuwang.base.pojo.vo.sys.SysMenuVO;
import lombok.Getter;
import lombok.Setter;

import java.util.Objects;

/**
 * FileName: SysMenuDO
 * Author:   chenjianhua
 * Date:     2024/9/8 12:45
 * Description: ${DESCRIPTION}
 */
@Setter
@Getter
@TableName("sys_menu")
public class SysMenuDO extends DataEntity<SysMenuVO> {
    /**
     * 菜单ID
     */
    @TableId(value = "menu_id", type = IdType.AUTO)
    private Integer menuId;

    /**
     * 菜单名称
     */
    private String menuName;

    /**
     * 父菜单ID
     */
    private Integer parentId;

    /**
     * 显示顺序
     */
    private Integer orderNum;

    /**
     * 路由地址
     */
    private String path;

    /**
     * 组件路径
     */
    private String component;

    /**
     * 路由参数
     */
    private String query;

    /**
     * 是否为外链（1是 0否）
     */
    private Integer isFrame;

    /**
     * 是否缓存（1缓存 0不缓存）
     */
    private Integer isCache;

    /**
     * 类型（M目录 C菜单 F按钮）
     */
    private String menuType;

    /**
     * 显示状态（1显示 0隐藏）
     */
    private Integer visible;

    /**
     * 菜单状态（1正常 0停用）
     */
    private Integer status;

    /**
     * 权限字符串
     */
    private String perms;

    /**
     * 菜单图标
     */
    private String icon;
    /**
     * 备注
     */
    private String remark;

    @Override
    public SysMenuVO toVo() {
        SysMenuVO vo = new SysMenuVO();
        vo.setMenuId(this.menuId);
        vo.setMenuName(this.menuName);
        vo.setMenuType(this.menuType);
        vo.setPerms(this.perms);
        vo.setOrderNum(this.orderNum);
        vo.setPath(this.path);
        vo.setComponent(this.component);
        vo.setQuery(this.query);
        vo.setIcon(this.icon);
        vo.setParentId(this.parentId);
        vo.setVisible(this.visible);
        vo.setIsFrame(this.isFrame);
        vo.setIsCache(this.isCache);
        vo.setStatus(this.status);
        vo.setRemark(this.remark);
        vo.setCreatorId(this.getCreatorId());
        vo.setCreateTime(this.getCreateTime());
        return vo;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        SysMenuDO sysMenuDO = (SysMenuDO) o;
        return menuId.equals(sysMenuDO.menuId) && parentId.equals(sysMenuDO.parentId) && perms.equals(sysMenuDO.perms);
    }

    @Override
    public int hashCode() {
        return Objects.hash(menuId, parentId, perms);
    }
}
