package com.zioinfo.mall.uiws.stats.mapper;

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

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/**
 * 근무현황 피벗 집계 매퍼. 원본 StatsRepository(JdbcTemplate 네이티브) → MyBatis 변환 이식.
 *
 * silo 정합(코어 TB_USER/TB_COMPANY/TB_CODE 미이식):
 *  - 근무자 라벨: mall_account.display_name (writer_id=username 조인). 미존재 시 writer_id 노출(COALESCE).
 *  - 근무처(company) 라벨: company_id 직접 사용(거래처 테이블 미이식).
 *  - 근무상태/근무유형 라벨: 코드값 직접 사용(공통코드 미이식).
 * 결과는 long-form(그룹키 + cnt). 서비스가 동적 컬럼으로 피벗한다.
 */
@Mapper
public interface StatsMapper {

    /** 개인별: 행=근무자×근무상태×근무유형, 동적열 차원=근무처. 컬럼: worker, work_status, work_type, dyn, cnt. */
    List<Map<String, Object>> personalWork(@Param("from") LocalDate from,
                                           @Param("to") LocalDate to,
                                           @Param("userId") String userId,
                                           @Param("scopeAll") boolean scopeAll,
                                           @Param("ownerIds") List<String> ownerIds);

    /** 업체별: 행=근무처×근무유형, 동적열 차원=근무자. 컬럼: company, work_type, dyn, cnt. */
    List<Map<String, Object>> companyWork(@Param("from") LocalDate from,
                                          @Param("to") LocalDate to,
                                          @Param("companyId") String companyId,
                                          @Param("userId") String userId,
                                          @Param("scopeAll") boolean scopeAll,
                                          @Param("ownerIds") List<String> ownerIds);
}
