package com.gzzm.lobster.skill;

import com.gzzm.lobster.common.SkillScope;
import net.cyan.thunwind.annotation.OQL;
import net.cyan.thunwind.annotation.OQLUpdate;
import net.cyan.thunwind.dao.GeneralDao;

import java.util.List;

/**
 * SkillDefinitionDao —— Skill 持久化 / Skill persistence.
 */
public abstract class SkillDefinitionDao extends GeneralDao {

    @OQL("select s from SkillDefinition s where s.skillId=:1")
    public abstract SkillDefinition getSkill(String skillId) throws Exception;

    @OQL("select s from SkillDefinition s where s.enabled=1 order by s.scope asc, s.name asc")
    public abstract List<SkillDefinition> listEnabled() throws Exception;

    @OQL("select s from SkillDefinition s where s.enabled=1 and s.scope=?1")
    public abstract List<SkillDefinition> listByScope(SkillScope scope) throws Exception;

    @OQL("select s from SkillDefinition s where s.scope=?1")
    public abstract List<SkillDefinition> listAllByScope(SkillScope scope) throws Exception;

    /** UserSkillApi 用：只看当前用户创建的 skills（不管 enabled，让用户自己看到草稿态）. */
    @OQL("select s from SkillDefinition s where s.ownerUserId=?1 order by s.updateTime desc")
    public abstract List<SkillDefinition> listOwnedBy(String ownerUserId) throws Exception;

    @OQL("select s from SkillDefinition s order by s.scope asc, s.name asc limit :1,:2")
    public abstract List<SkillDefinition> listAll(int offset, int limit) throws Exception;

    @OQL("select count(s) from SkillDefinition s")
    public abstract long countAll() throws Exception;

    @OQLUpdate("delete from SkillDefinition where skillId=?1")
    public abstract int deleteById(String skillId) throws Exception;
}
