package cn.ey.biz.module.system.convert.rate;

import cn.ey.biz.module.system.api.rate.dto.RateForFirmConfReqDTO;
import cn.ey.biz.module.system.api.rate.dto.RateForGpnReqDTO;
import cn.ey.biz.module.system.api.rate.dto.RateReqDTO;
import cn.ey.biz.module.system.api.rate.dto.RateResDTO;
import cn.ey.biz.module.system.dal.dataobject.rate.DictFirmBillRateDO;
import cn.ey.biz.module.system.dal.dataobject.rate.DictGdsRateValueDO;
import cn.ey.biz.module.system.dal.dataobject.rate.DictHrBillRateDO;
import cn.ey.biz.module.system.dal.dataobject.rate.SysUserNewDO;
import cn.ey.biz.module.system.dal.dataobject.user.AdminUserDO;
import cn.ey.biz.module.system.service.rate.dto.GdsRateConfigDTO;
import cn.ey.biz.module.system.service.rate.dto.RateConfigDTO;
import cn.ey.biz.module.system.service.rate.dto.RateScopeConfigDTO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;

/**
 * 金融汇率转换
 *
 * @author ShiJie-SJ.Li
 * @date 2023/06/13
 */
@Mapper
public interface FinanceRateConvert {

    FinanceRateConvert INSTANCE = Mappers.getMapper(FinanceRateConvert.class);

    RateConfigDTO convert2FirmRateConfigDTO(RateForGpnReqDTO rateReqDTO);

    RateConfigDTO convert3FirmRateConfigDTO(RateForFirmConfReqDTO rateForFirmConfReqDTO);

    GdsRateConfigDTO convertGdsRateConfigDTO(RateForGpnReqDTO rateForGpnReqDTO);

    RateResDTO convertRateResDTO(DictHrBillRateDO dictHrBillRateDO);

    @Mappings({
            @Mapping(source = "billRate", target = "billingRate")
    })
    RateResDTO convert2RateResDTO(DictFirmBillRateDO dictUserRateDO);

    RateScopeConfigDTO convertRateScopeConfigDTO(RateReqDTO rateReqDTO);

    @Mappings({
            @Mapping(source = "employeeCodeBlock", target = "codeBlockCode"),
            @Mapping(source = "rateValue", target = "costRate"),
            @Mapping(source = "rateValue", target = "billingRate")
    })
    RateResDTO convert3RateResDTO(DictGdsRateValueDO dictUserRateDO);

    AdminUserDO covertAdminDO(SysUserNewDO rateReqDTO);
}
