package com.ruoyi.analytics.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.ruoyi.analytics.domain.DashboardWidget;

/**
 * 仪表板组件数据访问接口
 * 
 * @author ruoyi
 * @date 2025-12-19
 */
@Mapper
public interface DashboardWidgetMapper
{
    /**
     * 查询仪表板组件
     * 
     * @param widgetId 仪表板组件主键
     * @return 仪表板组件
     */
    public DashboardWidget selectDashboardWidgetByWidgetId(Long widgetId);

    /**
     * 查询仪表板组件列表
     * 
     * @param dashboardWidget 仪表板组件
     * @return 仪表板组件集合
     */
    public List<DashboardWidget> selectDashboardWidgetList(DashboardWidget dashboardWidget);

    /**
     * 根据仪表板ID查询组件列表
     * 
     * @param dashboardId 仪表板ID
     * @param userId 用户ID
     * @return 组件列表
     */
    public List<DashboardWidget> selectWidgetsByDashboardId(@Param("dashboardId") String dashboardId, 
                                                           @Param("userId") Long userId);

    /**
     * 根据用户ID查询仪表板组件
     * 
     * @param userId 用户ID
     * @return 仪表板组件列表
     */
    public List<DashboardWidget> selectDashboardWidgetsByUserId(@Param("userId") Long userId);

    /**
     * 新增仪表板组件
     * 
     * @param dashboardWidget 仪表板组件
     * @return 结果
     */
    public int insertDashboardWidget(DashboardWidget dashboardWidget);

    /**
     * 修改仪表板组件
     * 
     * @param dashboardWidget 仪表板组件
     * @return 结果
     */
    public int updateDashboardWidget(DashboardWidget dashboardWidget);

    /**
     * 删除仪表板组件
     * 
     * @param widgetId 仪表板组件主键
     * @return 结果
     */
    public int deleteDashboardWidgetByWidgetId(Long widgetId);

    /**
     * 批量删除仪表板组件
     * 
     * @param widgetIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteDashboardWidgetByWidgetIds(Long[] widgetIds);

    /**
     * 根据仪表板ID删除所有组件
     * 
     * @param dashboardId 仪表板ID
     * @return 结果
     */
    public int deleteDashboardWidgetsByDashboardId(@Param("dashboardId") String dashboardId);

    /**
     * 批量插入仪表板组件
     * 
     * @param widgets 组件列表
     * @return 结果
     */
    public int batchInsertDashboardWidgets(@Param("widgets") List<DashboardWidget> widgets);

    /**
     * 更新组件位置
     * 
     * @param widgetId 组件ID
     * @param positionX X坐标
     * @param positionY Y坐标
     * @return 结果
     */
    public int updateWidgetPosition(@Param("widgetId") Long widgetId, 
                                   @Param("positionX") Integer positionX, 
                                   @Param("positionY") Integer positionY);

    /**
     * 更新组件大小
     * 
     * @param widgetId 组件ID
     * @param width 宽度
     * @param height 高度
     * @return 结果
     */
    public int updateWidgetSize(@Param("widgetId") Long widgetId, 
                               @Param("width") Integer width, 
                               @Param("height") Integer height);
}