package com.ruoyi.security.service;

import java.util.List;
import com.ruoyi.security.domain.EncryptionKey;

/**
 * 加密密钥Service接口
 * 
 * @author ruoyi
 * @date 2025-01-20
 */
public interface IEncryptionKeyService 
{
    /**
     * 查询加密密钥
     * 
     * @param keyId 加密密钥主键
     * @return 加密密钥
     */
    public EncryptionKey selectEncryptionKeyByKeyId(Long keyId);

    /**
     * 根据密钥标识符查询加密密钥
     * 
     * @param keyIdentifier 密钥标识符
     * @return 加密密钥
     */
    public EncryptionKey selectEncryptionKeyByIdentifier(String keyIdentifier);

    /**
     * 查询主密钥
     * 
     * @param keyUsage 密钥用途
     * @return 主密钥
     */
    public EncryptionKey selectPrimaryKey(String keyUsage);

    /**
     * 查询活跃密钥列表
     * 
     * @param keyUsage 密钥用途
     * @return 活跃密钥列表
     */
    public List<EncryptionKey> selectActiveKeys(String keyUsage);

    /**
     * 查询即将过期的密钥列表
     * 
     * @param days 天数
     * @return 即将过期的密钥列表
     */
    public List<EncryptionKey> selectExpiringKeys(int days);

    /**
     * 查询加密密钥列表
     * 
     * @param encryptionKey 加密密钥
     * @return 加密密钥集合
     */
    public List<EncryptionKey> selectEncryptionKeyList(EncryptionKey encryptionKey);

    /**
     * 新增加密密钥
     * 
     * @param encryptionKey 加密密钥
     * @return 结果
     */
    public int insertEncryptionKey(EncryptionKey encryptionKey);

    /**
     * 修改加密密钥
     * 
     * @param encryptionKey 加密密钥
     * @return 结果
     */
    public int updateEncryptionKey(EncryptionKey encryptionKey);

    /**
     * 更新密钥使用统计
     * 
     * @param keyId 密钥ID
     * @return 结果
     */
    public int updateKeyUsageStats(Long keyId);

    /**
     * 设置主密钥
     * 
     * @param keyId 密钥ID
     * @param keyUsage 密钥用途
     * @return 结果
     */
    public int setPrimaryKey(Long keyId, String keyUsage);

    /**
     * 批量删除加密密钥
     * 
     * @param keyIds 需要删除的加密密钥主键集合
     * @return 结果
     */
    public int deleteEncryptionKeyByKeyIds(Long[] keyIds);

    /**
     * 删除加密密钥信息
     * 
     * @param keyId 加密密钥主键
     * @return 结果
     */
    public int deleteEncryptionKeyByKeyId(Long keyId);
}