package cn.freemud.client;

import cn.freemud.base.constant.Version;
import cn.freemud.base.util.DateUtil;
import cn.freemud.entities.dto.*;
import cn.freemud.service.thirdparty.CouponClient;
import cn.freemud.service.thirdparty.CouponOfflineClient;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;

@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
@EnableDiscoveryClient
@EnableFeignClients
@EnableAutoConfiguration
public class CouponClientTest {
    @Autowired
    private CouponClient couponClient;

    @Autowired
    private CouponOfflineClient couponOfflineClient;

    /**
     * {
     *   "codes": [
     *     "88600017956721290413"
     *   ],
     *   "orderId": "126265728740503330",
     *   "partnerCode": "1864",
     *   "storeId": "1014",
     *   "userId": "115381881188636164",
     *   "ver": 1
     * }
     */
//    @Test
//    public void create () {
//        CouponCreateDto couponCreateDto = new CouponCreateDto();
//        couponCreateDto.setVer(Version.VERSION_1);
//        couponCreateDto.setUserId("115381881188636164");
//        // 4933
//        couponCreateDto.setActivityCodes(Arrays.asList("5016"));
//        couponCreateDto.setPartnerCode("1864");
//        couponCreateDto.setMobile("15754070662");
//        System.out.println(JSON.toJSON(couponCreateDto));
//        CouponBaseResponseDto responseDto = couponClient.create(couponCreateDto);
//        System.out.println(JSON.toJSON(responseDto));
//    }

//    @Test
//    public void list() {
//        CouponListDto couponListDto = new CouponListDto();
//        couponListDto.setPartnerCode("1809");
//        couponListDto.setUserId("12333");
//        couponListDto.setVer(Version.VERSION_1);
//        // 优惠券类型，0：满减券 1：代金券
//        couponListDto.setType(1);
//
//        System.out.println(JSON.toJSON(couponListDto));
//        CouponListResponseDto couponListResponseDto = couponClient.list(couponListDto);
//        System.out.println(JSON.toJSON(couponListResponseDto));
//
//
//        List<CouponListResponseDto.CouponBean> filterList = couponListResponseDto.getResult().stream().filter(a -> Arrays.stream(a.getStoreId().split(",")).anyMatch(Predicate.isEqual("000100"))).collect(Collectors.toList());
//
//        Map<String, CouponListResponseDto.CouponBean> couponBeanMap = filterList.stream().collect(Collectors.toMap(CouponListResponseDto.CouponBean::getCouponCode, a -> a,(k1, k2)->k1));
//        System.out.println(couponBeanMap);
//
//    }

//    @Test
//    public void verification() {
//        CouponVerificationDto couponVerificationDto = new CouponVerificationDto();
//        couponVerificationDto.setVer(Version.VERSION_1);
//        couponVerificationDto.setUserId("115381146196928724");
//        couponVerificationDto.setStoreId("1014");
//        couponVerificationDto.setPartnerCode("1864");
//        // 126065756376018730
//        couponVerificationDto.setOrderId("126082012916363042");
//        // 108077749714629
//        couponVerificationDto.setCodes(Arrays.asList("108075569721930"));
//        System.out.println(JSON.toJSON(couponVerificationDto));
//        CouponBaseResponseDto couponBaseResponseDto = couponClient.verification(couponVerificationDto);
//        System.out.println(JSON.toJSON(couponBaseResponseDto));
//    }

//    @Test
//    public void checkTest() {
//        VerifyCheckRequestDto verifyCheckRequestDto = new VerifyCheckRequestDto();
//        verifyCheckRequestDto.setCouponCodes(Arrays.asList("88600017956864226138"));
//        verifyCheckRequestDto.setPartnerCode("1864");
//        verifyCheckRequestDto.setUserId("1");
//        verifyCheckRequestDto.setVer(Integer.valueOf(Version.VERSION_1));
//        System.out.println(JSON.toJSONString(verifyCheckRequestDto));
//        CouponBaseResponseDto couponBaseResponseDto = couponClient.verifyCheck(verifyCheckRequestDto);
//        System.out.println(JSON.toJSONString(couponBaseResponseDto));
//    }

//    @Test
//    public void noticeTest() {
//        VerifyNoticeRequestDto verifyNoticeRequestDto = new VerifyNoticeRequestDto();
//        verifyNoticeRequestDto.setVer(Integer.valueOf(Version.VERSION_1));
//        verifyNoticeRequestDto.setCouponCode("88600017956864226138");
//        verifyNoticeRequestDto.setOrderId("1");
//        verifyNoticeRequestDto.setPartnerCode("1864");
//        verifyNoticeRequestDto.setStoreId("1002");
//        verifyNoticeRequestDto.setUserId("1");
//        System.out.println(JSON.toJSONString(verifyNoticeRequestDto));
//        CouponBaseResponseDto couponBaseResponseDto = couponClient.verifyNotice(verifyNoticeRequestDto);
//        System.out.println(JSON.toJSONString(couponBaseResponseDto));
//    }

    @Test
    public void verificationTest() {
        CouponCodeVerificationDto couponCodeVerificationDto = new CouponCodeVerificationDto();
        couponCodeVerificationDto.setVer(Integer.valueOf(Version.VERSION_1));
        couponCodeVerificationDto.setReqtype(71);
        couponCodeVerificationDto.setPartnerId("1864");
        couponCodeVerificationDto.setStation_id("-1");
        couponCodeVerificationDto.setOperator_id("-1");
        couponCodeVerificationDto.setStore_id("1002");
        // 订单号
        couponCodeVerificationDto.setTrans_id("2");
        couponCodeVerificationDto.setBusiness_date(DateUtil.convert2Str(new Date(), DateUtil.FORMAT_yyyyMMdd));
        List<CouponCodeVerificationTransDto> transactions = new ArrayList<>();
        CouponCodeVerificationTransDto couponCodeVerificationTransDto = new CouponCodeVerificationTransDto();
        couponCodeVerificationTransDto.setCode("88600017956864226138");
        transactions.add(couponCodeVerificationTransDto);
//        List<CouponCodeVerificationProductDto> products = new ArrayList<>();
//        CouponCodeVerificationProductDto couponCodeVerificationProductDto = new CouponCodeVerificationProductDto();
//        products.add(couponCodeVerificationProductDto);
//        couponCodeVerificationTransDto.setProducts(products);
        couponCodeVerificationDto.setTransactions(transactions);

        System.out.println(JSON.toJSONString(couponCodeVerificationDto));
        CouponCodeResponseDto couponCodeResponseDto = couponOfflineClient.verification(couponCodeVerificationDto);
        System.out.println(couponCodeResponseDto);
    }

}
