package cn.pluss.platform.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.apache.commons.lang3.StringUtils;

import javax.validation.constraints.NotEmpty;
import java.io.Serializable;
import java.util.Date;

/**
 * <p>
 * app页面菜单
 * </p>
 *
 * CREATE TABLE `tb_pluss_app_menu` (
 *   `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
 *   `name` varchar(20) DEFAULT NULL COMMENT '菜单名称',
 *   `code` varchar(20) DEFAULT NULL COMMENT '菜单code',
 *   `icon` varchar(255) DEFAULT NULL COMMENT '图标链接',
 *   `menu_group` varchar(11) DEFAULT NULL COMMENT '分组id',
 *   `nav_code` varchar(10) DEFAULT NULL COMMENT '导航code',
 *   `nav_name` varchar(255) DEFAULT NULL COMMENT '导航名称',
 *   `url` varchar(150) DEFAULT NULL COMMENT 'url链接，分组即不存在',
 *   `sort` tinyint(4) DEFAULT NULL COMMENT '排序',
 *   `visible` varchar(1) DEFAULT '1' COMMENT '是否展示，0：不展示；1：展示',
 *   `create_time` datetime DEFAULT NULL COMMENT '创建时间',
 *   `update_time` datetime DEFAULT NULL COMMENT '更新时间',
 *   PRIMARY KEY (`id`)
 * ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='app页面菜单';
 *
 * @author Djh
 * @since 2020-09-27
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("tb_pluss_app_menu")
public class AppMenu implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 菜单类型
     */
    @TableField(exist = false)
    private String menuType;

    public static void wrapper(AppMenu entity) {
        if ("1".equals(entity.getIsApplets())) {
            entity.setMenuType("2");
            return;
        }

        if ("1".equals(entity.isUniapp)) {
            entity.setMenuType("3");
            return;
        }

        if (!StringUtils.isEmpty(entity.getUrl()) && entity.getUrl().startsWith("http")) {
            entity.setMenuType("1");
            return;
        }

        entity.setMenuType("0");
    }


    public static void setByMenuType(AppMenu entity) {
        switch (entity.getMenuType()) {
            case "0":
                entity.setIsApplets("0");
                entity.setIsUniapp("0");
                entity.setUrl("");
                break;
            case "1":
                entity.setIsApplets("0");
                entity.setIsUniapp("0");
                break;
            case "2":
                entity.setUrl("");
                entity.setIsApplets("1");
                entity.setIsUniapp("0");
                break;
            case "3":
                entity.setUrl("");
                entity.setIsApplets("0");
                entity.setIsUniapp("1");
                break;
            default:
                break;
        }
    }

    /**
     * id
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 分组
     */
    @TableField(value = "menu_group", whereStrategy = FieldStrategy.NOT_EMPTY)
    private String menuGroup;

    /**
     * 分组名称
     */
    @TableField(exist = false)
    private String menuGroupDesc;

    /**
     * 菜单名称
     */
    @TableField("name")
    private String name;

    /**
     * 菜单code
     */
    @NotEmpty(message = "菜单code不能为空")
    @TableField("code")
    private String code;

    /**
     * 图标链接
     */
    @NotEmpty(message = "图标链接不能为空")
    @TableField("icon")
    private String icon;

    /**
     * 导航code
     */
    @NotEmpty(message = "导航code不能为空")
    @TableField(value = "nav_code", whereStrategy = FieldStrategy.NOT_EMPTY)
    private String navCode;

    /**
     * 导航名称
     */
    @TableField("nav_name")
    private String navName;

    /**
     * url链接
     */
    @TableField("url")
    private String url;

    /**
     * 是否是uniapp
     */
    @TableField("isUniapp")
    private String isUniapp;

    /**
     * 排序
     */
    @TableField("sort")
    private Integer sort;

    /**
     * 是否展示，0：不展示；1：展示
     */
    @NotEmpty(message = "是否展示必填")
    @TableField("visible")
    private String visible;

    /**
     * 是否小程序 0否 1是
     */
    @TableField("isApplets")
    private String isApplets;

    /**
     * 小程序原始id 类似gh_xxxxx
     */
    @TableField("userName")
    private String userName;

    /**
     * 跳转小程序路径, 或者uniapp链接
     */
    @TableField("path")
    private String path;

    /**
     * 创建时间
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private Date createTime;

    @TableField(exist = false, condition = "create_time &gt; #{%s}")
    private Date createTimeStart;

    @TableField(exist = false, condition = "create_time &lt; #{%s}")
    private Date createTimeEnd;

    /**
     * 更新时间
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    @TableField(exist = false, condition = "update_time &gt; #{%s}")
    private Date updateTimeStart;

    @TableField(exist = false, condition = "update_time &lt; #{%s}")
    private Date updateTimeEnd;

    @TableField(exist = false)
    private AppMenuUserType appMenuUserType;


    /**
     * 安卓是否显示
     */
    private String isAndroidEnabled;

    /**
     * ios 是否显示
     */
    private String isIphoneEnabled;

    /**
     * 安卓最低适用版本
     */
    private String androidMinVersionName;

    /**
     * ios适用最低版本
     */
    private String iosMinVersionName;
}
