package com.y.fish.base.api.model;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.google.common.base.Strings;
import lombok.Data;
import org.springframework.boot.json.JsonParserFactory;

import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by myliang on 11/7/17.
 */
@Data
public class Role {

    public static final String TABLE_NAME = "roles";

    private long id;

    private String name;

    private String permissions;

    private LocalDateTime createdAt;

    private LocalDateTime updatedAt;

    /**
     * 验证是否有访问权限
     * @param entity entity名称
     * @param access 访问权限: read, create, update, destroy
     * @return
     */
    public boolean hasPermission(Object entity, Object access) {
        if (Strings.isNullOrEmpty(permissions)) return false;
        Map ps = JsonParserFactory.getJsonParser().parseMap(permissions);

        String entityName;
        if (entity instanceof String) {
            entityName = (String) entity;
        } else {
            entityName = (String) entity;
        }

        String permission;
        if (access instanceof Permission) {
            permission = ((Permission) access).name();
        } else {
            permission = (String) access;
        }

        if (ps.containsKey(entityName)) {
            List<String> methodNames = (List<String>) ps.get(entityName);
            return methodNames.stream().filter(m -> m.equals(permission)).count() > 0;
        }
        return false;
    }

    @JsonIgnore
    public Map getPermissionsMap() {
        return Strings.isNullOrEmpty(permissions) ?
                new HashMap() : JsonParserFactory.getJsonParser().parseMap(permissions);
    }


}