package com.yc.ship.module.product.utils;

import cn.hutool.core.date.DateUtil;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;

/**
 * 航次编码生成
 */
public class VoyageUUCodeUtils {


    /**
     * 规则是游轮编号+航次日期+起始地字母，例如 CJXLY-20250904-YC-CQ，
     * 意思是 长江行揽月+20250901+宜昌+重庆
     * @return
     */
    public static String generateVoyageNo(String shipCode, LocalDateTime startTime, String boardingAddress, String leaveAddress) {
        String startTimeStr = DateUtil.format(startTime, "yyyyMMdd");
        String boardPy = getFirstSpell(boardingAddress);
        String leavePy = getFirstSpell(leaveAddress);
        return shipCode + "-" + startTimeStr + "-" + boardPy + "-" + leavePy;
    }

    /**
     * 规则是游轮编号+航次日期+起始地字母，例如 CJXLY-20250904-YC-CQ，
     * 意思是 长江行揽月+20250901+宜昌+重庆
     * @return
     */
    public static String generateVoyageNo(String shipCode, String starDate, String boardingAddress, String leaveAddress) {
        String boardPy = getFirstSpell(boardingAddress);
        String leavePy = getFirstSpell(leaveAddress);
        return shipCode + "-" + starDate + "-" + boardPy + "-" + leavePy;
    }

    /**
     * 获取汉字串拼音首字母，英文字符不变
     * @param chinese 汉字串
     * @return 汉语拼音首字母
     */
    public static String getFirstSpell(String chinese) {
        StringBuffer pybf = new StringBuffer();
        char[] arr = chinese.toCharArray();
        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
        defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > 128) {
                try {
                    String[] temp = PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat);
                    if (temp != null) {
                        pybf.append(temp[0].charAt(0));
                    }
                } catch (BadHanyuPinyinOutputFormatCombination e) {
                    e.printStackTrace();
                }
            } else {
                pybf.append(arr[i]);
            }
        }
        return pybf.toString().replaceAll("\\W", "").trim().toUpperCase();
    }
    public static void main(String[] args) {
//        System.out.println(generateVoyageNo("CJXLY", LocalDateTime.now(), "宜昌", "重庆"));
        List<Map<String, List<String>>> list = new ArrayList<>();
        Map<String, List< String>> map = new HashMap<>();
        map.put("ad",Arrays.asList("1", "2", "3", "4"));
        list.add(map);

        Map<String, List< String>> map1 = new HashMap<>();
        map1.put("ad", Arrays.asList("5", "6", "7", "8"));
        list.add(map1);

        List<String> collect = list.stream().flatMap(map3 -> map3.values().stream().flatMap(list1 -> list1.stream())).collect(Collectors.toList());
        System.out.println(collect);

    }

}
