package com.red.circle.console.infra.database.rds.entity.admin;

import com.baomidou.mybatisplus.annotation.TableName;
import com.red.circle.console.infra.database.rds.enums.MenuTypeEnum;
import com.red.circle.console.infra.database.rds.enums.StatusEnum;
import com.red.circle.framework.mybatis.entity.TimestampBaseEntity;
import java.io.Serial;
import java.util.Optional;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

/**
 * <p>
 * 菜单表.
 * </p>
 *
 * @author pengliang
 */
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
@TableName("sys_menu")
public class Menu extends TimestampBaseEntity {

  @Serial
  private static final long serialVersionUID = 1L;

  /**
   * 记录id.
   */
  protected Integer id;

  /**
   * 父菜单ID，一级菜单为0
   */
  private Integer parentId;

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

  /**
   * 路径
   */
  private String path;

  /**
   * 路由
   */
  private String router;

  /**
   * 类型:1:目录,2:菜单,3:按钮
   */
  private MenuTypeEnum menuType;

  /**
   * 菜单图标
   */
  private String icon;
  /**
   * 别名
   */
  private String alias;

  /**
   * 权重序号
   */
  private Integer sort;

  /**
   * 状态 0：禁用 1：正常
   */
  private StatusEnum status;

  public Integer menuTypeToInt() {
    return Optional.ofNullable(getMenuType()).map(MenuTypeEnum::getValue).orElse(null);
  }

  public Integer statusToInt() {
    return Optional.ofNullable(getStatus()).map(StatusEnum::getValue).orElse(null);
  }

  public MenuTypeEnum toMenuType(int value) {
    return MenuTypeEnum.toEnum(value);
  }

  public StatusEnum toStatus(int value) {
    return StatusEnum.toEnum(value);
  }

}
