package taurus.util;

import com.robot.Util;
import java.util.*;

public class TinHuChi {

    /**
     * 测试方法
     */
    public static void main(String[] args) {
//        System.out.println("=== 测试开始 ===\n");
//
//        // 测试1：你的例子
        List<Integer> hand1 = new ArrayList<>();

        // hand1.add(209);
        hand1.add(208);
        hand1.add(204);
        //   hand1.add(204);

        hand1.add(203);
        hand1.add(203);
        // hand1.add(202);

        hand1.add(201);
        hand1.add(108);
        hand1.add(105);


        hand1.add(104);
        hand1.add(104);
        hand1.add(103);
        // hand1.add(102);


        int addcard =203;

        Map<String, Object> map = new HashMap<>();
        //碰之后的map
        Map<String, Object> map2 = new HashMap<>();

        //先判断碰之前还需要几手牌，以及孤章
//                            int jiangnum = checkduijiang(changShaCardInhand);
        List<Integer> tmpChangSch = new ArrayList<>();
        tmpChangSch.addAll(hand1);
        tmpChangSch.add(addcard);
        ChangshaWinSplitCard.checkNormalHu(tmpChangSch, map);
        System.out.println("checkNormalHu 孤章数量  " + ((List<Integer>) map.get("cardResiue")).size());
        System.out.println("checkNormalHu 手数  " + map.get("remainingMelds"));


        //碰之后
        List<Integer> pengtemphand = new ArrayList<>();
        pengtemphand.addAll(tmpChangSch);
        Util.removeCard(pengtemphand, addcard, 3);

        ChangshaWinSplitCard.checkNormalHu(pengtemphand, map2);
        //判断两个map是否找到更优
        System.out.println("碰之前 map1: 手数" + Integer.parseInt(map.get("remainingMelds").toString()));
        System.out.println("碰之后 map2 手数:" + Integer.parseInt(map2.get("remainingMelds").toString()));
        //碰之后的手数小于碰之前的手数，可以碰
        if (Integer.parseInt(map2.get("remainingMelds").toString()) < Integer.parseInt(map.get("remainingMelds").toString())) {
            System.out.println("===============碰之后的手数小于碰之前的手数，可以碰 决定碰牌================== ++++ ");
        } else if (Integer.parseInt(map2.get("remainingMelds").toString()) == Integer.parseInt(map.get("remainingMelds").toString())) { //碰完后和碰之前手数相等，需要判断孤章数量
            //碰之后的数量
            int size2 = ((List<Integer>) map2.get("cardResiue")).size();
            System.out.println("碰之后的孤章数量    " + size2);

            int size1 = ((List<Integer>) map.get("cardResiue")).size();
            System.out.println("碰之前的孤章数量    " + size1);
            if (size2 < size1) {
                System.out.println("===============碰之后的孤章数量 小于 碰之前的孤章数量可以碰 ================== ++++ ");
            }
            //碰之后的手数大于碰之前的手数，或者碰之后的孤章数量大于碰之前的孤章数量不能碰
        } else if (Integer.parseInt(map2.get("remainingMelds").toString()) > Integer.parseInt(map.get("remainingMelds").toString()) || ((List<Integer>) map2.get("cardResiue")).size() > ((List<Integer>) map.get("cardResiue")).size()) {
            System.out.println("碰之后的手数大于碰之前的手数，或者碰之后的孤章数量大于碰之前的孤章数量不能碰");
        }
    }


    public static List<Integer> checktingpai(List<Integer> cardhand) {
        List<Integer> tpcards = new ArrayList<>();
        List<Integer> tmphc = cardhand;
        for (int i = 0; i < cardhand.size(); i++) {

            int tmpcard = tmphc.get(0);
            tmphc.remove(0);
            for (int j = 101; j <= 109; j++) {
                WinCard win = new WinCard(tmphc, j);
                if (win.tryWin()) {
                    if (!tpcards.contains(tmpcard)) {
                        tpcards.add(tmpcard);
                    }
                }
            }
            for (int j = 201; j <= 209; j++) {
                WinCard win = new WinCard(tmphc, j);
                if (win.tryWin()) {
                    if (!tpcards.contains(tmpcard)) {
                        tpcards.add(tmpcard);
                    }
                }
            }
            tmphc.add(tmpcard);
        }
        return tpcards;
    }

    /**
     * 获取牌型名称
     */
    public static String getTypeName(int type) {
        switch (type) {
            case 1:
                return "万";
            case 2:
                return "筒";
            case 3:
                return "条";
            default:
                return "字";
        }
    }


}