import {defineStore} from 'pinia';
import {ElMessageBox} from "element-plus";
import {useGlobalMessage} from "./useGlobalMessage";

const { showMessage } = useGlobalMessage();

function saveStateToLocalStorage(state) {
    localStorage.setItem('filesStore', JSON.stringify(state));
}

function clearLocalStorage() {
    localStorage.clear()
}

function loadStateFromLocalStorage() {
    return JSON.parse(localStorage.getItem('filesStore'));
}

export const useFilesStore = defineStore('files', {
    state: () => ({
        fileList: [
            {
                "label": "Welcome",
                "name": "1",
                "type":"PVE",
                "visible": true,
                "groups": [
                    {
                        "shortDescription": "<h1>鬼灵歌姬</h1><h2><em>这是一个演示项目,用于测试显示6个式神的对齐效果</em></h2>",
                        "groupInfo": [
                            {
                                "avatar": "/assets/Shikigami/sp/372.png",
                                "name": "因幡辉夜姬",
                                "rarity": "SP"
                            },
                            {
                                "avatar": "/assets/Shikigami/ssr/356.png",
                                "name": "千姬",
                                "rarity": "SSR"
                            },
                            {
                                "avatar": "/assets/Shikigami/sp/554.png",
                                "name": "纺愿缘结神",
                                "rarity": "SP"
                            },
                            {
                                "avatar": "/assets/Shikigami/ssr/556.png",
                                "name": "天照",
                                "rarity": "SSR"
                            },
                            {
                                "avatar": "/assets/Shikigami/ssr/557.png",
                                "name": "伊邪那美",
                                "rarity": "SSR"
                            },
                            {
                                "avatar": "/assets/Shikigami/sp/367.png",
                                "name": "绘世花鸟卷",
                                "rarity": "SP"
                            }
                        ],
                        "details": "<h2><strong>开局因幡普攻主怪后锁二</strong></h2>"
                    },
                    {
                        "shortDescription": "<h1>魂土15秒</h1><p><em>相同式神编辑不同属性</em></p>",
                        "groupInfo": [
                            {
                                "avatar": "/assets/Shikigami/ssr/364.png",
                                "name": "阿修罗",
                                "rarity": "SSR",
                                "properties": {
                                    "edit": true,
                                    "yuhun": {
                                        "yuhunSetEffect": [
                                            {
                                                "name": "狂骨",
                                                "shortName": "狂",
                                                "type": "attack",
                                                "avatar": "/assets/Yuhun/狂骨.png"
                                            },
                                            {
                                                "name": "荒骷髅",
                                                "shortName": "荒",
                                                "type": "PVE",
                                                "avatar": "/assets/Yuhun/荒骷髅.png"
                                            }
                                        ],
                                        "target": "1",
                                        "property2": [
                                            "Attack"
                                        ],
                                        "property4": [
                                            "Attack"
                                        ],
                                        "property6": [
                                            "Crit",
                                            "CritDamage"
                                        ]
                                    },
                                    "levelRequired": "40",
                                    "speed": "",
                                    "skillRequiredMode": "all",
                                    "skillRequired": [
                                        "5",
                                        "5",
                                        "5"
                                    ]
                                }
                            },
                            {
                                "avatar": "/assets/Shikigami/ssr/364.png",
                                "name": "阿修罗",
                                "rarity": "SSR",
                                "properties": {
                                    "edit": true,
                                    "yuhun": {
                                        "yuhunSetEffect": [
                                            {
                                                "name": "狂骨",
                                                "shortName": "狂",
                                                "type": "attack",
                                                "avatar": "/assets/Yuhun/狂骨.png"
                                            },
                                            {
                                                "name": "鬼灵歌伎",
                                                "shortName": "歌伎",
                                                "type": "PVE",
                                                "avatar": "/assets/Yuhun/鬼灵歌伎.png"
                                            }
                                        ],
                                        "target": "0",
                                        "property2": [
                                            "Attack"
                                        ],
                                        "property4": [
                                            "Attack"
                                        ],
                                        "property6": [
                                            "Crit",
                                            "CritDamage"
                                        ]
                                    },
                                    "levelRequired": "40",
                                    "speed": "",
                                    "skillRequiredMode": "all",
                                    "skillRequired": [
                                        "5",
                                        "5",
                                        "5"
                                    ]
                                }
                            },
                            {
                                "avatar": "/assets/Shikigami/ssr/370.png",
                                "name": "饭笥",
                                "rarity": "SSR"
                            },
                            {
                                "avatar": "/assets/Shikigami/ssr/369.png",
                                "name": "食灵",
                                "rarity": "SSR"
                            },
                            {
                                "avatar": "/assets/Shikigami/r/205.png",
                                "name": "座敷童子",
                                "rarity": "R"
                            }
                        ],
                        "details": ""
                    }
                ]
            },
            {
                "label": "Test",
                "name": "2",
                "visible": true,
                "type":"PVE",
                "groups": [
                    {
                        "shortDescription": "<h1>御魂·悲鸣</h1><p>这是一个演示项目,用于测试不同标签页的切换效果</p>",
                        "groupInfo": [
                            {},
                            {},
                            {},
                            {},
                            {}
                        ],
                        "details": ""
                    },
                    {
                        "shortDescription": "",
                        "groupInfo": [
                            {},
                            {},
                            {},
                            {},
                            {}
                        ],
                        "details": ""
                    }
                ]
            }
        ],
        activeFile: "1",
    }),
    getters: {
        visibleFiles: (state) => state.fileList.filter(file => file.visible),
    },
    actions: {
        initializeWithPrompt() {
            const savedState = loadStateFromLocalStorage();
            if (savedState) {
                ElMessageBox.confirm(
                    '检测到有未保存的旧数据,是否恢复?',
                    '提示',
                    {
                        confirmButtonText: '恢复',
                        cancelButtonText: '不恢复',
                        type: 'warning',
                    }
                ).then(() => {
                    this.fileList = savedState.fileList || [];
                    this.activeFile = savedState.activeFile || "1";
                    showMessage('success', '数据已恢复');
                }).catch(() => {
                    clearLocalStorage();
                    showMessage('info', '选择了不恢复旧数据');
                });
            }
        },
        setupAutoSave() {
            setInterval(() => {
                saveStateToLocalStorage(this.$state);
            }, 30000); // 设置间隔时间为30秒
        },
        addFile(file) {
            this.fileList.push({...file, visible: true});
            this.activeFile = file.name;
        },
        setActiveFile(fileId: number) {
            this.activeFile = fileId;
        },
        setVisible(fileId: number, visibility: boolean) {
            const file = this.fileList.find(file => file.name === fileId);
            if (file) {
                file.visible = visibility;
            }
        },
        closeTab(fileName: String) {
            const file = this.fileList.find(file => file.name === fileName);
            if (file) {
                file.visible = false;
                if (this.activeFile === fileName) {
                    const nextVisibleFile = this.visibleFiles[0];
                    this.activeFile = nextVisibleFile ? nextVisibleFile.name : -1;
                }
            }
        },
        async deleteFile(fileId: string) {
            try {
                if (this.fileList.length === 1) {
                    showMessage('warning', '无法删除');
                    return;
                }
                await ElMessageBox.confirm('确定要删除此文件吗?', '提示', {
                    confirmButtonText: '确定',
                    cancelButtonText: '取消',
                    type: 'warning',
                });

                const index = this.fileList.findIndex(file => file.name === fileId);
                if (index > -1) {
                    this.fileList.splice(index, 1);
                    if (this.activeFile === fileId) {
                        const nextVisibleFile = this.visibleFiles[0];
                        this.activeFile = nextVisibleFile ? nextVisibleFile.name : "-1";
                    }
                }
                showMessage('success', '删除成功!');
            } catch (error) {
                showMessage('info', '已取消删除');
            }
        },
        renameFile(fileId, newName) {
            const file = this.fileList.find(file => file.name === fileId);
            if (file) {
                file.label = newName;
            }
        },
    },
});