package org.springblade.thirdparty.wps.pojo.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;
import org.springframework.util.StringUtils;

import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.stream.Stream;

/**
 *  wps 文件枚举
 * @author bfhuange
 * @date 2024/10/30
 */
public class WpsFile {
    /**
     *  预览模式
     */
    @AllArgsConstructor
    @Getter
    public enum PreviewMode {
        /**
         *  高清预览
         */
        HIGH_DEFINITION("high_definition", "高清预览"),
        /**
         *  普通预览
         */
        ORDINARY("ordinary", "普通预览"),
        /**
         *  缓存预览
         */
        CACHE("cache", "缓存预览"),
        /**
         *  公文极速预览
         */
        OFFICIAL("official", "公文极速预览"),
        ;
        /**
         *  编码
         */
        private final String code;
        /**
         *  名称
         */
        private final String name;
    }
    /**
     * 类型枚举
     */
    @AllArgsConstructor
    @Getter
    public enum Type {
        /**
         *  文字文件 高清模式
         */
        WORD("w", "文字文件", PreviewMode.HIGH_DEFINITION.getCode(), List.of("doc,dot,wps,wpt,docx,dotx,docm,dotm,rtf,txt,mht,mhtml,htm,html,uot3".split(","))),
        /**
         *  表格文件 普通模式
         */
        EXCEL("s", "表格文件", PreviewMode.ORDINARY.getCode(), List.of("xls,xlt,et,xlsx,xltx,csv,xlsm,xltm,ett".split(","))),
        /**
         *  演示文件 普通模式
         */
        PPT("p", "演示文件", PreviewMode.ORDINARY.getCode(), List.of("ppt,pptx,pptm,ppsx,ppsm,pps,potx,potm,dpt,dps,pot".split(","))),
        /**
         *  PDF文件 普通模式
         */
        PDF("f", "PDF文件", PreviewMode.ORDINARY.getCode(), List.of("pdf,ofd".split(","))),
        /**
         * 文件类型（图片、压缩包、md、eml、代码、其他）普通模式
         */
        OTHER("x", "文件类型（图片、压缩包、md、eml、代码、其他）", PreviewMode.ORDINARY.getCode(), Collections.emptyList()),
        ;

        /**
         *  编码
         */
        private final String code;
        /**
         *  名称
         */
        private final String name;
        /**
         *  预览模式
         */
        private final String previewMode;
        /**
         *  文件扩展名列表
         */
        private final List<String> exts;

        /**
         *  根据文件名获取类型
         * @param fileName
         * @return
         */
        public static Type getByFileName(String fileName) {
            if (!StringUtils.hasText(fileName) || !fileName.contains(".")) {
                // 文件名为空，或文件名不包含. 返回null
                return OTHER;
            }
            // 获取文件扩展名
            String ext = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase(Locale.ROOT);
            return Stream.of(values())
                    // 扩展名包含在内的
                    .filter(type -> type.exts.contains(ext))
                    .findFirst()
                    .orElse(OTHER);
        }
    }
}
