package com.njcn.rdms.module.system.service.permission;

import com.njcn.rdms.module.system.controller.admin.permission.vo.userVisibilityConfig.UserVisibilityConfigSaveReqVO;
import com.njcn.rdms.module.system.dal.dataobject.permission.UserVisibilityConfigDO;

/**
 * 用户数据可见性配置 Service 接口
 */
public interface UserVisibilityConfigService {

    /**
     * 按 userId 查询可见性配置（可为 null，表示该用户未配置）。
     */
    UserVisibilityConfigDO getByUserId(Long userId);

    /**
     * 保存或更新用户可见性配置。
     *
     * 一人一条配置（user_id 唯一索引）：已有记录则 update，否则 insert。
     * 保存前校验 visibilityType 与字段的一致性：
     * - all → visibleDirectionIds / visibleProjectIds 均须为 null
     * - directions → visibleDirectionIds 非空；visibleProjectIds 须为 null
     * - projects → visibleProjectIds 非空；visibleDirectionIds 须为 null
     *
     * @return 配置记录 id
     */
    Long saveOrUpdate(UserVisibilityConfigSaveReqVO reqVO);

    /**
     * 按 userId 删除配置（唯一索引，无需按 id 删）。
     */
    void deleteByUserId(Long userId);

}
