package com.red.circle.order.infra.database.rds.service.product.impl;

import com.red.circle.common.business.core.enums.SysOriginPlatformEnum;
import com.red.circle.framework.mybatis.constant.PageConstant;
import com.red.circle.framework.mybatis.service.impl.BaseServiceImpl;
import com.red.circle.order.infra.database.rds.dao.product.ProductConfigV2DAO;
import com.red.circle.order.infra.database.rds.entity.product.ProductConfigV2;
import com.red.circle.order.infra.database.rds.service.product.ProductConfigV2Service;
import com.red.circle.order.inner.model.cmd.SysProductConfigQryCmd;
import com.red.circle.order.inner.model.cmd.SysProductConfigV2QryCmd;
import com.red.circle.tool.core.text.StringUtils;
import java.util.List;
import org.springframework.stereotype.Service;

/**
 * <p>
 * 内购产品列表 服务实现类
 * </p>
 *
 * @author pengliang
 * @since 2020-08-06
 */
@Service
public class ProductConfigV2ServiceImpl extends
    BaseServiceImpl<ProductConfigV2DAO, ProductConfigV2> implements ProductConfigV2Service {

  @Override
  public List<ProductConfigV2> listProductConfig(SysProductConfigV2QryCmd cmd) {

    return query()
        .eq(ProductConfigV2::getPlatform, cmd.getPlatform())
        .eq(StringUtils.isBlank(cmd.getRegion()), ProductConfigV2::getRegions, "")
        .like(StringUtils.isNotBlank(cmd.getRegion()), ProductConfigV2::getRegions, cmd.getRegion())
        .eq(ProductConfigV2::getSysOrigin, cmd.getSysOrigin())
        .eq(ProductConfigV2::getShowcase, cmd.getShowcase())
        .last(PageConstant.formatLimit(50))
        .orderByAsc(ProductConfigV2::getSort)
        .list();
  }

  @Override
  public ProductConfigV2 getProduct(SysOriginPlatformEnum sysOrigin, String platform,
      String productPackage, String regionId) {

    // 这里无比查询上架中的,不然可能出现多条，而导致结果数据拿到不正确的那条。
    return query()
        .eq(ProductConfigV2::getPlatform, platform)
        .eq(ProductConfigV2::getProductPackage, productPackage)
        .eq(StringUtils.isBlank(regionId), ProductConfigV2::getRegions, "")
        .like(StringUtils.isNotBlank(regionId), ProductConfigV2::getRegions, regionId)
        .eq(ProductConfigV2::getSysOrigin, sysOrigin)
        .eq(ProductConfigV2::getShowcase, Boolean.TRUE)
        .last(PageConstant.LIMIT_ONE)
        .getOne();
  }

  @Override
  public List<ProductConfigV2> getProductConfigs(SysProductConfigQryCmd query) {
    return query()
        .eq(ProductConfigV2::getSysOrigin, query.getSysOrigin())
        .eq(ProductConfigV2::getPlatform, query.getPlatform())
        .eq(StringUtils.isBlank(query.getRegion()), ProductConfigV2::getRegions, "")
        .like(StringUtils.isNotBlank(query.getRegion()), ProductConfigV2::getRegions,
            query.getRegion())
        .eq(ProductConfigV2::getShowcase, query.getShowcase())
        .last(PageConstant.formatLimit(50))
        .orderByAsc(ProductConfigV2::getSort)
        .list();
  }

  @Override
  public List<ProductConfigV2> listCandyGroupBySysOrigin(SysProductConfigV2QryCmd query) {
    log.warn(query.toString());
    return query()
            .eq(ProductConfigV2::getSysOrigin, query.getSysOrigin())
            .eq(ProductConfigV2::getShowcase, query.getShowcase())
            .orderByAsc(ProductConfigV2::getSort)
            .list();
  }
}
