package org.clear.file;


import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.ActionEvent;
import java.io.IOException;


//TIP 要<b>运行</b>代码,请按 <shortcut actionId="Run"/> 或
// 点击装订区域中的 <icon src="AllIcons.Actions.Execute"/> 图标。
public class Main {
    public static void main(String[] args) {
        // 创建一个新的JFrame窗口
        JFrame frame = new JFrame("Always On Top Window");

        // 创建一个按钮并添加到窗口中
        JButton button = new JButton("净化文件名");
       button.addActionListener(new AbstractAction() {
           @Override
           public void actionPerformed(ActionEvent e) {
               // 查看 IntelliJ IDEA 建议如何修正。
               clearFileName();
           }
       });
        frame.getContentPane().add(button);

        // 设置窗口大小
        frame.setSize(50, 80);
//        frame.setMinimumSize(new Dimension(300, 200));

        // 设置窗口关闭操作
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 将窗口设置为总是置顶
        frame.setAlwaysOnTop(true);

        // 显示窗口
        frame.setVisible(true);

    }

    private static void clearFileName() {
        try {
            // 获取系统剪贴板的内容
            Transferable transferable = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);

            if (transferable != null && transferable.isDataFlavorSupported(DataFlavor.stringFlavor)) {
                String clipboardText = (String) transferable.getTransferData(DataFlavor.stringFlavor);
                String text = replaceSpecialCharacters(clipboardText);
                copyText(text);
                System.out.println("剪贴板内容: " + text);
            } else {
                System.out.println("剪贴板没有文本内容或不支持文本内容");
            }
        } catch (UnsupportedFlavorException | IOException ex) {
            ex.printStackTrace();
        }
    }

    public static String replaceSpecialCharacters(String dirPath) {

        /*
         * windows下文件名中不能含有:\ / : * ? " < > | 英文的这些字符 ,这里使用"."、"'"进行替换。
         * \/:?| 用.替换
         * "<> 用'替换
         */
        dirPath = dirPath.replaceAll("[/\\\\:*?|]", "");
        dirPath = dirPath.replaceAll("[\"<>]", "");
        dirPath = dirPath.replace("\n", "");
        dirPath = dirPath.replaceAll("[\\\\/:\\*\\?\\\"<>\\|]", "");
        dirPath = dirPath.replaceAll("[^\\u0009\\u000a\\u000d\\u0020-\\uD7FF\\uE000-\\uFFFD]", "");
        dirPath = dirPath.replaceAll("[\\uD83D\\uFFFD\\uFE0F\\u203C\\u3010\\u3011\\u300A\\u166D\\u200C\\u202A\\u202C\\u2049\\u20E3\\u300B\\u300C\\u3030\\u065F\\u0099\\u0F3A\\u0F3B\\uF610\\uFFFC]", "");
        dirPath = dirPath.replaceAll("\\s+", " ");

        return dirPath;
    }


    private static void copyText(String textToCopy) {
        // 创建一个 StringSelection 对象,用于封装要设置到剪贴板的文本
        StringSelection stringSelection = new StringSelection(textToCopy);

        // 获取系统剪贴板
        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);

        System.out.println("已将文本 \"" + textToCopy + "\" 设置到剪贴板中.");
    }
}