package com.yutou.qqbot;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.yutou.qqbot.utlis.Log;
import com.yutou.qqbot.utlis.RedisTools;
import redis.clients.jedis.Jedis;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

public class QQNumberManager {
    private static QQNumberManager manager;
    private QQNumberManager(){

    }

    public static QQNumberManager getManager() {
        if(manager==null) {
            manager=new QQNumberManager();
        }
        return manager;
    }
    public void addNumber(Long qq,boolean isGroup){
        if(RedisTools.exists(qq,null)){
            return;
        }
        JSONObject json=new JSONObject();
        json.put("group",isGroup);
        json.put("power",new JSONArray());
        json.put("model",new JSONArray());
        RedisTools.set(qq,json.toJSONString());
    }
    public List<Long> getNumber(){
        List<Long> list =new ArrayList<>();
        Jedis jedis=RedisTools.getRedis();
        jedis.select(RedisTools.QQBOT_USER);
        Set<String> set=jedis.keys("*");
        for (String s : set) {
            try {
            list.add(Long.parseLong(s));
            }catch (Exception ignored){

            }
        }
        jedis.close();
        return list;
    }
    public boolean addPower(Long qq, String power){
        if(RedisTools.exists(qq,null)){
            JSONObject json=JSON.parseObject(RedisTools.get(qq));
            JSONArray array=json.getJSONArray("power");
            array.add(power);
            json.put("power",array);
            return  RedisTools.set(qq,json.toJSONString());
        }
        return false;
    }
    public List<String> getPower(Long qq){
        List<String> list=new ArrayList<>();
        if(RedisTools.exists(qq,null)){
            JSONObject json=JSON.parseObject(RedisTools.get(qq));
            JSONArray array=json.getJSONArray("power");
            for (Object power : array) {
                list.add((String) power);
            }
            return list;
        }
        return list;
    }
    public List<String> getUseModel(long qq) {
        List<String> list=new ArrayList<>();
        if(RedisTools.exists(qq,null)){
            JSONObject json=JSON.parseObject(RedisTools.get(qq));
            JSONArray array=json.getJSONArray("model");
            for (Object power : array) {
                list.add((String) power);
            }
            return list;
        }
        return list;
    }
    public boolean delPower(Long qq, String power){
        if(RedisTools.exists(qq,null)){
            JSONObject json=JSON.parseObject(RedisTools.get(qq));
            JSONArray array=json.getJSONArray("power");
            array.remove(power);
            json.put("power",array);
            return RedisTools.set(qq,json.toJSONString());
        }
        return false;
    }
    public boolean addUseModel(Long qq,Class<?> modelClass){
        if(RedisTools.exists(qq,null)){
            JSONObject json=JSON.parseObject(RedisTools.get(qq));
            JSONArray array=json.getJSONArray("model");
            array.add(modelClass.getName());
            json.put("model",array);
            return  RedisTools.set(qq,json.toJSONString());
        }
        return false;
    }
    public boolean delUseModel(Long qq,Class<?> modelClass){
        if(RedisTools.exists(qq,null)){
            JSONObject json=JSON.parseObject(RedisTools.get(qq));
            JSONArray array=json.getJSONArray("model");
            array.remove(modelClass.getName());
            json.put("model",array);
            return RedisTools.set(qq,json.toJSONString());
        }
        return false;
    }
    public boolean isExistsPower(Long qq, String... power){
        //1
        if(RedisTools.exists(qq,null)){
            JSONObject json=JSON.parseObject(RedisTools.get(qq));
            JSONArray array=json.getJSONArray("power");
            for (String key : power) {
                if(!array.contains(key)){
                    return false;
                }
            }
            return true;
        }
        return false;
    }
    public boolean isGroup(Long qq){
        if(RedisTools.exists(qq,null)){
            JSONObject json= JSON.parseObject(RedisTools.get(qq));
            return json.getBooleanValue("group");
        }
        return false;
    }
    public boolean isUseModel(Long qq,Class<?> modelClass){
        if(RedisTools.exists(qq,null)){
            JSONObject json=JSON.parseObject(RedisTools.get(qq));
            JSONArray array=json.getJSONArray("model");
            return array.contains(modelClass.getName());
        }
        return false;
    }


}