package com.lesingle.creation.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lesingle.creation.dto.tenant.CreateTenantDTO;
import com.lesingle.creation.dto.tenant.UpdateTenantDTO;
import com.lesingle.creation.entity.Tenant;
import com.lesingle.creation.vo.tenant.TenantDetailVO;
import com.lesingle.creation.vo.tenant.TenantListVO;

import java.util.List;

/**
 * 租户服务接口
 */
public interface TenantService extends IService<Tenant> {

    /**
     * 创建租户
     *
     * @param dto 创建租户 DTO
     * @param creatorId 创建人 ID
     * @return 租户详情 VO
     */
    TenantDetailVO create(CreateTenantDTO dto, Long creatorId);

    /**
     * 分页查询租户列表
     *
     * @param page 页码
     * @param pageSize 每页大小
     * @return 租户列表分页数据
     */
    com.baomidou.mybatisplus.extension.plugins.pagination.Page<TenantListVO> pageList(int page, int pageSize);

    /**
     * 根据 ID 查询租户详情
     *
     * @param id 租户 ID
     * @return 租户详情 VO
     */
    TenantDetailVO detail(Long id);

    /**
     * 根据编码查询租户
     *
     * @param code 租户编码
     * @return 租户详情 VO
     */
    TenantDetailVO getByCode(String code);

    /**
     * 根据域名查询租户
     *
     * @param domain 租户域名
     * @return 租户详情 VO
     */
    TenantDetailVO getByDomain(String domain);

    /**
     * 更新租户
     *
     * @param id 租户 ID
     * @param dto 更新租户 DTO
     * @param modifierId 修改人 ID
     * @return 租户详情 VO
     */
    TenantDetailVO update(Long id, UpdateTenantDTO dto, Long modifierId);

    /**
     * 删除租户
     *
     * @param id 租户 ID
     */
    void delete(Long id);

    /**
     * 获取租户的菜单树
     *
     * @param tenantId 租户 ID
     * @return 菜单树
     */
    List<?> getTenantMenus(Long tenantId);
}
