<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Release Description Generator</title>
    <style>
        :root {
            --bg-color: #1a1a1a;
            --text-color: #e1e1ff;
            --primary-color: #4a6fa5;
            --input-bg: #2d2d2d;
            --input-border: #3d3d3d;
            --button-primary: #4a6fa5;
            --button-hover: #5c89c7;
            --container-bg: rgba(26, 26, 26, 0.95);
            --output-bg: #2d2d2d;
        }

        @keyframes space-float {
            0% {
                transform: translate(0, 0);
            }

            50% {
                transform: translate(-20px, 20px);
            }

            100% {
                transform: translate(0, 0);
            }
        }

        @keyframes twinkle-1 {

            0%,
            100% {
                opacity: 1;
            }

            50% {
                opacity: 0.3;
            }
        }

        @keyframes twinkle-2 {

            0%,
            100% {
                opacity: 0.7;
            }

            50% {
                opacity: 0.2;
            }
        }

        @keyframes twinkle-3 {

            0%,
            100% {
                opacity: 0.9;
            }

            50% {
                opacity: 0.1;
            }
        }

        @keyframes nebula-shift {
            0% {
                background-position: 0% 50%;
            }

            50% {
                background-position: 100% 50%;
            }

            100% {
                background-position: 0% 50%;
            }
        }

        @keyframes floatPlanet1 {
            0% {
                transform: translate(0, 0) rotate(0deg);
            }

            50% {
                transform: translate(20px, 20px) rotate(180deg);
            }

            100% {
                transform: translate(0, 0) rotate(360deg);
            }
        }

        @keyframes floatPlanet2 {
            0% {
                transform: translate(0, 0) scale(1);
            }

            50% {
                transform: translate(-15px, 10px) scale(1.1);
            }

            100% {
                transform: translate(0, 0) scale(1);
            }
        }

        @keyframes floatPlanet3 {
            0% {
                transform: translate(0, 0);
            }

            33% {
                transform: translate(15px, -15px);
            }

            66% {
                transform: translate(-15px, 15px);
            }

            100% {
                transform: translate(0, 0);
            }
        }

        @keyframes cloudMove {
            0% {
                transform: rotate(0deg);
            }

            100% {
                transform: rotate(360deg);
            }
        }

        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            margin: 0;
            padding: 20px;
            background-color: var(--bg-color);
            color: var(--text-color);
            min-height: 100vh;
            box-sizing: border-box;
            position: relative;
            overflow-x: hidden;
        }

        .format-select {
            width: 100%;
            padding: 8px 12px;
            border: 1px solid var(--input-border);
            border-radius: 6px;
            background-color: var(--input-bg);
            color: var(--text-color);
            margin-bottom: 10px;
            font-family: inherit;
            cursor: pointer;
        }

        .format-select:focus {
            outline: none;
            border-color: var(--primary-color);
            box-shadow: 0 0 0 2px rgba(74, 111, 165, 0.2);
        }

        .checkbox-label {
            display: flex;
            align-items: center;
            gap: 10px;
            cursor: pointer;
            margin: 15px 0;
        }

        .checkbox-label input[type="checkbox"] {
            width: auto;
            margin: 0;
            cursor: pointer;
            accent-color: var(--primary-color);
        }

        .release-name-container .checkbox-label {
            white-space: nowrap;
            margin-bottom: 0;
        }

        .settings-btn {
            position: absolute;
            top: 20px;
            right: 20px;
            background: var(--button-primary);
            color: white;
            border: none;
            border-radius: 6px;
            padding: 8px 15px;
            cursor: pointer;
            z-index: 1001;
            transition: all 0.3s ease;
        }

        .import-btn {
            right: 140px;
        }

        .settings-btn:hover {
            background: var(--button-hover);
            transform: translateY(-1px);
        }

        .settings-panel {
            position: fixed;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            background: var(--container-bg);
            padding: 30px;
            border-radius: 12px;
            box-shadow: 0 0 20px rgba(0, 0, 0, 0.5);
            z-index: 1000;
            width: 500px;
            max-width: 90vw;
            max-height: 90vh;
            overflow-y: auto;
            backdrop-filter: blur(10px);
        }

        .settings-content {
            max-height: calc(90vh - 100px);
            padding-right: 10px;
        }

        .settings-panel textarea {
            width: 100%;
            padding: 8px 12px;
            border: 1px solid var(--input-border);
            border-radius: 6px;
            background-color: var(--input-bg);
            color: var(--text-color);
            margin-bottom: 10px;
            font-family: monospace;
            resize: vertical;
            min-height: 100px;
            line-height: 1.4;
        }

        .settings-panel textarea:focus {
            outline: none;
            border-color: var(--primary-color);
            box-shadow: 0 0 0 2px rgba(74, 111, 165, 0.2);
        }

        .settings-overlay {
            position: fixed;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            background: rgba(0, 0, 0, 0.7);
            backdrop-filter: blur(3px);
            z-index: 999;
        }

        .release-name-container {
            display: flex;
            align-items: center;
            gap: 10px;
            margin-bottom: 10px;
        }

        .release-name-container input {
            flex: 1;
            margin-bottom: 0;
        }

        .container {
            max-width: 1400px;
            margin: 0 auto;
            background-color: var(--container-bg);
            padding: 20px;
            border-radius: 12px;
            box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
            backdrop-filter: blur(10px);
            position: relative;
            z-index: 1;
        }

        .split-container {
            display: flex;
            gap: 40px;
            margin-top: 20px;
        }

        .input-section {
            width: 400px;
            min-width: 400px;
        }

        .output-section {
            flex: 1;
            display: flex;
            flex-direction: column;
        }

        .form-group {
            margin-bottom: 15px;
        }

        label {
            display: block;
            margin-bottom: 5px;
            color: var(--text-color);
            font-weight: 500;
        }

        input,
        select {
            width: 100%;
            padding: 8px 12px;
            border: 1px solid var(--input-border);
            border-radius: 6px;
            background-color: var(--input-bg);
            color: var(--text-color);
            margin-bottom: 10px;
            font-family: monospace;
            transition: border-color 0.3s, box-shadow 0.3s;
        }

        input:focus,
        select:focus {
            outline: none;
            border-color: var(--primary-color);
            box-shadow: 0 0 0 2px rgba(74, 111, 165, 0.2);
        }

        .generate-btn {
            background-color: var(--button-primary);
            color: white;
            padding: 10px;
            border: none;
            border-radius: 6px;
            cursor: pointer;
            font-weight: 500;
            width: 100%;
            transition: background-color 0.3s, transform 0.2s;
        }

        .generate-btn:hover {
            background-color: var(--button-hover);
            transform: translateY(-1px);
        }

        .button-group {
            display: flex;
            gap: 10px;
        }

        .button-group button {
            flex: 1;
        }

        .copy-btn {
            background-color: var(--input-bg);
            color: var(--text-color);
            padding: 10px;
            border: 1px solid var(--input-border);
            border-radius: 6px;
            cursor: pointer;
            transition: background-color 0.3s, transform 0.2s;
        }

        .copy-btn:hover {
            background-color: var(--input-border);
            transform: translateY(-1px);
        }

        .output {
            background-color: var(--output-bg);
            padding: 15px;
            border-radius: 6px;
            white-space: pre-wrap;
            font-family: monospace;
            min-height: 955px;
            overflow-y: auto;
            margin-bottom: 10px;
            border: 1px solid var(--input-border);
            color: #d0d0d0;
        }

        h1 {
            color: var(--text-color);
            text-align: center;
            margin-bottom: 30px;
            font-weight: 500;
        }

        h2 {
            margin-top: 0;
            color: var(--primary-color);
            margin-bottom: 15px;
            font-weight: 500;
        }

        .stars {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            pointer-events: none;
            z-index: -2;
        }

        .star {
            position: absolute;
            background: white;
            border-radius: 50%;
        }

        .star-1 {
            width: 1px;
            height: 1px;
            animation: twinkle-1 3s infinite ease-in-out;
        }

        .star-2 {
            width: 2px;
            height: 2px;
            animation: twinkle-2 4s infinite ease-in-out;
        }

        .star-3 {
            width: 3px;
            height: 3px;
            animation: twinkle-3 5s infinite ease-in-out;
        }

        .planet {
            position: fixed;
            border-radius: 50%;
            pointer-events: none;
            z-index: -1;
            opacity: 0.6;
        }

        .planet1 {
            width: 100px;
            height: 100px;
            background: radial-gradient(circle at 30% 30%, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0) 20%),
                linear-gradient(45deg, #4B90DA, #27ae60, #4B90DA);
            box-shadow: inset -15px -15px 40px rgba(0, 0, 0, 0.4),
                0 0 30px rgba(75, 144, 218, 0.3);
            position: absolute;
            top: 15%;
            right: 10%;
            animation: floatPlanet1 30s infinite linear;
        }

        .planet2 {
            width: 150px;
            height: 150px;
            background: linear-gradient(rgba(255, 170, 100, 0.8) 20%,
                    rgba(200, 140, 90, 0.8) 30%,
                    rgba(255, 170, 100, 0.8) 40%,
                    rgba(200, 140, 90, 0.8) 50%,
                    rgba(255, 170, 100, 0.8) 60%,
                    rgba(200, 140, 90, 0.8) 70%,
                    rgba(255, 170, 100, 0.8) 80%);
            box-shadow: inset -30px -30px 50px rgba(0, 0, 0, 0.4),
                0 0 50px rgba(255, 170, 100, 0.3);
            position: absolute;
            bottom: 20%;
            left: 5%;
            animation: floatPlanet2 25s infinite ease-in-out;
        }

        .planet3 {
            width: 80px;
            height: 80px;
            background: radial-gradient(circle at 30% 30%, #fff 0%, rgba(255, 255, 255, 0) 10%),
                linear-gradient(45deg, #c1440e, #d85a31 40%, #aa2e00);
            box-shadow: inset -15px -15px 40px rgba(0, 0, 0, 0.4),
                0 0 30px rgba(193, 68, 14, 0.3);
            position: absolute;
            top: 60%;
            right: 25%;
            animation: floatPlanet3 35s infinite ease-in-out;
        }

        .toggle-switch-container {
            display: flex;
            align-items: center;
            gap: 8px;
            margin-left: 10px;
        }

        .toggle-input {
            display: none;
        }

        .toggle-label {
            position: relative;
            display: inline-block;
            width: 50px;
            height: 26px;
            background-color: #333;
            border-radius: 13px;
            border: 2px solid var(--primary-color);
            cursor: pointer;
            transition: 0.3s;
        }

        .toggle-button {
            position: absolute;
            content: '';
            width: 20px;
            height: 20px;
            border-radius: 50%;
            background-color: var(--primary-color);
            top: 50%;
            transform: translateY(-50%);
            left: 1px;
            transition: 0.3s;
        }

        .toggle-input:checked+.toggle-label .toggle-button {
            left: calc(100% - 21px);
        }

        .toggle-text {
            font-size: 14px;
            color: var(--text-color);
            user-select: none;
        }

        .upload-section {
            margin-top: 20px;
        }

        .separator {
            display: flex;
            align-items: center;
            text-align: center;
            margin: 15px 0;
        }

        .separator::before,
        .separator::after {
            content: '';
            flex: 1;
            border-bottom: 1px solid var(--input-border);
        }

        .separator span {
            padding: 0 10px;
            color: var(--text-color);
            font-size: 14px;
        }

        .file-upload-label {
            display: block;
            padding: 10px;
            background: var(--input-bg);
            border: 2px dashed var(--input-border);
            border-radius: 6px;
            text-align: center;
            cursor: pointer;
            transition: all 0.3s ease;
        }

        .file-upload-label:hover {
            border-color: var(--primary-color);
            background: rgba(74, 111, 165, 0.1);
        }

        .file-upload-label input {
            display: none;
        }

        .nav-btn {
            position: relative;
            /* Override absolute positioning */
            margin-left: 10px;
            /* Add spacing between buttons */
        }

        /* Create a button container to hold all buttons */
        .button-container {
            position: static;
            top: 20px;
            right: 20px;
            display: flex;
            gap: 10px;
            z-index: 1001;
        }
    </style>
</head>

<body>
    <div class="planet planet1"></div>
    <div class="planet planet2"></div>
    <div class="planet planet3"></div>
    <div class="stars"></div>
    <div class="button-container">
        <button onclick="toggleSettings()" class="settings-btn">⚙️ Settings</button>
        <button onclick="toggleImport()" class="settings-btn import-btn">📥 Import</button>
        <button onclick="window.open('https://kingcatto.github.io/CS.RIN.RU-Info-combiner/', '_blank')"
            class="settings-btn nav-btn">📋 CS.rin.ru Info Combiner</button>
        <button onclick="window.open('https://kingcatto.github.io/steam-manifest-hash-checker-HTML/', '_blank')"
            class="settings-btn nav-btn">🔍 Steam Manifest Hash Checker</button>
        <button onclick="window.open('https://github.com/KingCatto/Super-Steam-Packer-Queue-Creator/', '_blank')"
            class="settings-btn nav-btn">🚀 Super Steam Packer Queue Creator</button>

    </div>
    <div id="settingsOverlay" class="settings-overlay" style="display: none;" onclick="toggleSettings()"></div>
    <div id="settingsPanel" class="settings-panel" style="display: none;">
        <h2>Settings</h2>
        <div class="settings-content">
            <div class="form-group">
                <label for="repackerName">Repacker Name:</label>
                <input type="text" id="repackerName" placeholder="e.g., Morrenus Games">

                <label for="systemSpecs">System Specs:</label>
                <input type="text" id="systemSpecs" placeholder="e.g., 16c/24t/32GB RAM">

                <label for="requiredRam">Required RAM:</label>
                <input type="text" id="requiredRam" placeholder="e.g., 4 GB">

                <label for="repackBy">REPACK BY:</label>
                <input type="text" id="repackBy" placeholder="e.g., Your Name">

                <label for="website">WEBSITE:</label>
                <input type="text" id="website" placeholder="e.g., your website url">

                <label for="greetings">GREETINGS TO:</label>
                <input type="text" id="greetings" placeholder="e.g., Razor12911, Cesar82, DODI">

                <label for="customNotes">Optional Notes (will appear after main description):</label>
                <textarea id="customNotes" placeholder="Enter any additional notes you want to appear in your release"
                    rows="4"></textarea>

                <label for="outputFormat">Output Format:</label>
                <select id="outputFormat" class="format-select">
                    <option value="bbcode">BBCode</option>
                    <option value="discord">Discord Markdown</option>
                    <option value="plaintext">Plain Text</option>
                </select>

                <label class="checkbox-label">
                    <input type="checkbox" id="includeHeader" checked>
                    Include "Repacker Presents" header
                </label>

                <label class="checkbox-label">
                    <input type="checkbox" id="listAllLanguages" checked>
                    List all languages (unchecked for MULTi format)
                </label>

                <label class="checkbox-label">
                    <input type="checkbox" id="includeGreetings" checked>
                    Include Greetings section
                </label>

                <label class="checkbox-label">
                    <input type="checkbox" id="includeLossless" checked>
                    Include "100% Lossless & MD5 Perfect" line
                </label>

                <label class="checkbox-label">
                    <input type="checkbox" id="useKaOsFormat">
                    Use KaOs Release Name Format
                </label>
            </div>
            <button onclick="saveSettings()" class="generate-btn">Save Settings</button>
        </div>
    </div>

    <div id="importOverlay" class="settings-overlay" style="display: none;" onclick="toggleImport()"></div>
    <div id="importPanel" class="settings-panel" style="display: none;">
        <h2>Import Release Text</h2>
        <div class="settings-content">
            <label for="importText">Paste your release text here:</label>
            <textarea id="importText"
                placeholder="Paste your BBCode, Discord, or Plain text release description here..."
                rows="10"></textarea>
            <div class="upload-section">
                <div class="separator">
                    <span>OR</span>
                </div>
                <label for="fileUpload" class="file-upload-label">
                    <span>Choose a file</span>
                    <input type="file" id="fileUpload" accept=".txt" onChange="handleFileUpload(event)">
                </label>
            </div>
            <button onclick="importReleaseText()" class="generate-btn">Import</button>
        </div>
    </div>

    <div class="container">
        <h1>🎮 Release Description Generator</h1>

        <div class="split-container">
            <div class="input-section">
                <div class="form-group">
                    <label for="imagelink">Cover Image Link:</label>
                    <input type="text" id="imagelink" placeholder="https://example.com/image.jpg">

                    <label for="gamename">Game Name:</label>
                    <input type="text" id="gamename" required>

                    <label for="buildnumber">Build/Version Number:</label>
                    <div class="release-name-container">
                        <input type="text" id="buildnumber" placeholder="e.g., 1234567">
                        <div class="toggle-switch-container">
                            <input type="checkbox" id="isBuildNumber" class="toggle-input" checked
                                onchange="updateToggleLabel()">
                            <label for="isBuildNumber" class="toggle-label">
                                <span class="toggle-button"></span>
                            </label>
                            <span id="toggleText" class="toggle-text">Build</span>
                        </div>
                    </div>

                    <label for="releaseDate">Release Date:</label>
                    <input type="text" id="releaseDate" placeholder="e.g., Jan 13, 2025">

                    <label for="genre">Genre:</label>
                    <input type="text" id="genre" placeholder="e.g., Action, Adventure">

                    <label for="developer">Developer:</label>
                    <input type="text" id="developer" placeholder="e.g., Game Studio Name">

                    <label for="publisher">Publisher:</label>
                    <input type="text" id="publisher" placeholder="e.g., Publisher Name">

                    <label for="store">Store URL:</label>
                    <input type="text" id="store" placeholder="e.g., https://store.steampowered.com/app/...">

                    <label for="crack">Crack Type:</label>
                    <input type="text" id="crack" placeholder="e.g., CODEX, PLAZA">

                    <label for="originalsize">Original Game Size:</label>
                    <input type="text" id="originalsize" placeholder="e.g., 45.2 GB">

                    <label for="repacksize">Repack Size:</label>
                    <input type="text" id="repacksize" placeholder="e.g., 28.4 GB">

                    <label for="installtime">Install Time:</label>
                    <input type="text" id="installtime" placeholder="e.g., ~15 mins">

                    <label for="languages">Languages (comma separated):</label>
                    <input type="text" id="languages" placeholder="e.g., English, French, German">

                    <label for="downloadlink">Download Link:</label>
                    <input type="text" id="downloadlink">

                    <label for="releasename">Release Name:</label>
                    <div class="release-name-container">
                        <input type="text" id="releasename" readonly>
                        <button onclick="generateReleaseName()" class="generate-btn"
                            style="width: auto; margin-left: 10px; padding: 8px 15px;">Generate Name</button>
                    </div>
                </div>

                <button onclick="generateDescription()" class="generate-btn">Generate Description</button>
            </div>
            <div class="output-section">
                <h2>Output</h2>
                <div id="output" class="output"></div>
                <div class="button-group">
                    <button id="copyBtn" onclick="copyToClipboard()" class="copy-btn">Copy to Clipboard</button>
                    <button id="downloadBtn" onclick="downloadDescription()" class="copy-btn">Download
                        Description</button>
                </div>
            </div>
        </div>
    </div>

    <script>
        const defaultSettings = {
            repackerName: '',
            systemSpecs: '',
            requiredRam: '',
            customNotes: '',
            includeLossless: true,
            includeHeader: true,
            repackBy: '',
            website: '',
            greetings: '',
            includeGreetings: true,
            useKaOsFormat: false,
            outputFormat: 'bbcode',
            listAllLanguages: true,
            isBuild: true
        };

        function formatText(text, format) {
            switch (format) {
                case 'discord':
                    return text
                        .replace(/\[b\]/g, '**')
                        .replace(/\[\/b\]/g, '**')
                        .replace(/\[i\]/g, '_')
                        .replace(/\[\/i\]/g, '_')
                        .replace(/\[url\](.*?)\[\/url\]/g, '<$1>')
                        .replace(/\[url=(.*?)\](.*?)\[\/url\]/g, '[$2]($1)')
                        .replace(/\[color=#[0-9A-Fa-f]{6}\]/g, '')
                        .replace(/\[\/color\]/g, '')
                        .replace(/\[size=\d+\]/g, '')
                        .replace(/\[\/size\]/g, '')
                        .replace(/\[list\]/g, '')
                        .replace(/\[\/list\]/g, '')
                        .replace(/\[img\](.*?)\[\/img\]/g, '![]($1)')
                        .replace(/\[\*\]/g, '• ');
                case 'plaintext':
                    return text
                        .replace(
                            /\[b\]|\[\/b\]|\[i\]|\[\/i\]|\[url\]|\[\/url\]|\[color=[^\]]*\]|\[\/color\]|\[size=\d+\]|\[\/size\]|\[quote\]|\[\/quote\]|\[list\]|\[\/list\]|\[\*\]/g,
                            '')
                        .replace(/\[img\](.*?)\[\/img\]/g, 'Image: $1')
                        .replace(/\[url=(.*?)\](.*?)\[\/url\]/g, '$2 ($1)');
                default: // BBCode
                    return text;
            }
        }

        function parseReleaseText(text) {
            const fields = {
                gamename: '',
                buildnumber: '',
                releaseDate: '',
                genre: '',
                developer: '',
                publisher: '',
                store: '',
                crack: '',
                originalsize: '',
                repacksize: '',
                installtime: '',
                languages: '',
                imagelink: '',
                downloadlink: ''
            };

            // Extract image link
            const imgMatch = text.match(/\[img\](.*?)\[\/img\]/);
            if (imgMatch) fields.imagelink = imgMatch[1];

            // Extract based on information
            const basedOnMatch = text.match(/Based on:?\s*(.*?)(?:\(([^\)]+)\))?\n/i);
            if (basedOnMatch) {
                fields.gamename = basedOnMatch[1].trim();
                if (basedOnMatch[2]) {
                    const version = basedOnMatch[2].trim();
                    if (version.startsWith('B')) {
                        fields.buildnumber = version.substring(1);
                        document.getElementById('isBuildNumber').checked = true;
                    } else if (version.startsWith('v')) {
                        fields.buildnumber = version.substring(1);
                        document.getElementById('isBuildNumber').checked = false;
                    }
                }
            }

            // Extract other fields using regex patterns
            const patterns = {
                releaseDate: /Release Date:?\s*(.*?)\n/i,
                genre: /Genre:?\s*(.*?)\n/i,
                developer: /Developer:?\s*(.*?)\n/i,
                publisher: /Publisher:?\s*(.*?)\n/i,
                store: /Store:?\s*(?:\[url\])?(.*?)(?:\[\/url\])?\n/i, // Modified to handle both BBCode and plain URLs
                crack: /Crack:?\s*(.*?)(?:\n|$)/i,
                languages: /Languages:?\s*(.*?)(?:\n|$)/i,
                originalsize: /Original Size:?\s*(.*?)\n/i,
                repacksize: /Repack Size:?\s*(.*?)\n/i,
                installtime: /Installation time:?\s*(.*?)(?=\s*on\s|$)/i,
            };

            // Extract fields using patterns
            Object.entries(patterns).forEach(([field, pattern]) => {
                const match = text.match(pattern);
                if (match) fields[field] = match[1].trim();
            });

            // Handle download link specifically (could be in different formats)
            const downloadPatterns = [
                /\[url=(.*?)\].*?\[\/url\]/, // BBCode with custom text
                /\[url\](.*?)\[\/url\]/, // Simple BBCode
                /Download:?\s*(https?:\/\/\S+)/i // Plain text
            ];

            for (const pattern of downloadPatterns) {
                const match = text.match(pattern);
                if (match) {
                    fields.downloadlink = match[1];
                    break;
                }
            }

            return fields;
        }

        function loadSettings() {
            const savedSettings = localStorage.getItem('repackerSettings');
            if (savedSettings) {
                return JSON.parse(savedSettings);
            }
            return defaultSettings;
        }

        function saveSettings() {
            const settings = {
                repackerName: document.getElementById('repackerName').value || defaultSettings.repackerName,
                systemSpecs: document.getElementById('systemSpecs').value || defaultSettings.systemSpecs,
                requiredRam: document.getElementById('requiredRam').value || defaultSettings.requiredRam,
                customNotes: document.getElementById('customNotes').value,
                includeLossless: document.getElementById('includeLossless').checked,
                includeHeader: document.getElementById('includeHeader').checked,
                repackBy: document.getElementById('repackBy').value || defaultSettings.repackBy,
                website: document.getElementById('website').value || defaultSettings.website,
                greetings: document.getElementById('greetings').value || defaultSettings.greetings,
                includeGreetings: document.getElementById('includeGreetings').checked,
                useKaOsFormat: document.getElementById('useKaOsFormat').checked,
                outputFormat: document.getElementById('outputFormat').value,
                listAllLanguages: document.getElementById('listAllLanguages').checked,
                isBuild: document.getElementById('isBuildNumber').checked
            };

            localStorage.setItem('repackerSettings', JSON.stringify(settings));
            toggleSettings();
            alert('Settings saved!');
        }

        function toggleSettings() {
            const panel = document.getElementById('settingsPanel');
            const overlay = document.getElementById('settingsOverlay');
            const settings = loadSettings();

            if (panel.style.display === 'none') {
                document.getElementById('repackerName').value = settings.repackerName;
                document.getElementById('systemSpecs').value = settings.systemSpecs;
                document.getElementById('requiredRam').value = settings.requiredRam;
                document.getElementById('customNotes').value = settings.customNotes || '';
                document.getElementById('includeLossless').checked = settings.includeLossless;
                document.getElementById('includeHeader').checked = settings.includeHeader;
                document.getElementById('repackBy').value = settings.repackBy;
                document.getElementById('website').value = settings.website;
                document.getElementById('greetings').value = settings.greetings;
                document.getElementById('includeGreetings').checked = settings.includeGreetings;
                document.getElementById('useKaOsFormat').checked = settings.useKaOsFormat;
                document.getElementById('outputFormat').value = settings.outputFormat;
                document.getElementById('listAllLanguages').checked = settings.listAllLanguages;
                document.getElementById('isBuildNumber').checked = settings.isBuild;
                updateToggleLabel();
                panel.style.display = 'block';
                overlay.style.display = 'block';
            } else {
                panel.style.display = 'none';
                overlay.style.display = 'none';
            }
        }

        function toggleImport() {
            const panel = document.getElementById('importPanel');
            const overlay = document.getElementById('importOverlay');

            if (panel.style.display === 'none') {
                panel.style.display = 'block';
                overlay.style.display = 'block';
                document.getElementById('importText').value = '';
            } else {
                panel.style.display = 'none';
                overlay.style.display = 'none';
            }
        }

        function importReleaseText() {
            const importTextArea = document.getElementById('importText');
            const text = importTextArea.value;

            if (!text) {
                alert('Please paste a release text to import.');
                return;
            }

            const fields = parseReleaseText(text);

            Object.entries(fields).forEach(([field, value]) => {
                const element = document.getElementById(field);
                if (element) element.value = value;
            });

            generateReleaseName();
            toggleImport();
            generateDescription();
        }

        function generateDescription() {
            const settings = loadSettings();
            const format = document.getElementById('outputFormat').value;
            const imagelink = document.getElementById('imagelink').value;
            const gamename = document.getElementById('gamename').value;
            const buildnumber = document.getElementById('buildnumber').value;
            const releaseDate = document.getElementById('releaseDate').value;
            const genre = document.getElementById('genre').value;
            const developer = document.getElementById('developer').value;
            const publisher = document.getElementById('publisher').value;
            const store = document.getElementById('store').value;
            const crack = document.getElementById('crack').value;
            const originalsize = document.getElementById('originalsize').value;
            const repacksize = document.getElementById('repacksize').value;
            const installtime = document.getElementById('installtime').value;
            const downloadlink = document.getElementById('downloadlink').value;
            const isBuildNumber = document.getElementById('isBuildNumber').checked;
            const languages = document.getElementById('languages').value;
            const listAllLanguages = settings.listAllLanguages;

            let description = format === 'bbcode' ? '[quote]' : '';

            if (settings.includeHeader) {
                description += format === 'bbcode' ?
                    `[b][color=#0080FF]${settings.repackerName} Presents[/color][/b]\n` :
                    format === 'discord' ? `**${settings.repackerName} Presents**\n` :
                    `${settings.repackerName} Presents\n`;
            }

            if (imagelink) {
                description += format === 'bbcode' ? `[img]${imagelink}[/img]\n` :
                    format === 'discord' ? `![](${imagelink})\n` :
                    `Image: ${imagelink}\n`;
            }

            description += '\n';

            if (gamename) {
                const version = buildnumber ? (isBuildNumber ? `B${buildnumber}` : `v${buildnumber}`) : '';
                description += format === 'bbcode' ? `[b]Based on:[/b] ${gamename}${version ? ` (${version})` : ''}\n` :
                    format === 'discord' ? `**Based on:** ${gamename}${version ? ` (${version})` : ''}\n` :
                    `Based on: ${gamename}${version ? ` (${version})` : ''}\n`;
            }

            if (releaseDate) description += format === 'bbcode' ? `[b]Release Date:[/b] ${releaseDate}\n` :
                format === 'discord' ? `**Release Date:** ${releaseDate}\n` :
                `Release Date: ${releaseDate}\n`;

            if (genre) description += format === 'bbcode' ? `[b]Genre:[/b] ${genre}\n` :
                format === 'discord' ? `**Genre:** ${genre}\n` :
                `Genre: ${genre}\n`;

            if (developer) description += format === 'bbcode' ? `[b]Developer:[/b] ${developer}\n` :
                format === 'discord' ? `**Developer:** ${developer}\n` :
                `Developer: ${developer}\n`;

            if (publisher) description += format === 'bbcode' ? `[b]Publisher:[/b] ${publisher}\n` :
                format === 'discord' ? `**Publisher:** ${publisher}\n` :
                `Publisher: ${publisher}\n`;

            if (store) description += format === 'bbcode' ? `[b]Store:[/b] [url]${store}[/url]\n` :
                format === 'discord' ? `**Store:** <${store}>\n` :
                `Store: ${store}\n`;

            if (crack) {
                description += format === 'bbcode' ? `\n[b]Crack:[/b] [color=#ff0000]${crack}[/color]` :
                    format === 'discord' ? `\n**Crack:** ${crack}` :
                    `\nCrack: ${crack}`;
            }

            if (settings.includeLossless) {
                description += format === 'bbcode' ?
                    `\n\n[b]100% Lossless & MD5 Perfect[/b]: all files are identical to originals after installation` :
                    format === 'discord' ?
                    `\n\n**100% Lossless & MD5 Perfect**: all files are identical to originals after installation` :
                    `\n\n100% Lossless & MD5 Perfect: all files are identical to originals after installation`;
            }

            if (languages) {
                if (languages.includes('MULTi') || !listAllLanguages) {
                    // If it's already in MULTi format or user wants MULTi format, use as is
                    description += format === 'bbcode' ? `\n\n[b]Languages[/b]: ${languages}` :
                        format === 'discord' ? `\n\n**Languages**: ${languages}` :
                        `\n\nLanguages: ${languages}`;
                } else {
                    // Only count and convert to MULTi format if it's not already MULTi
                    const langCount = languages.split(',').length;
                    description += format === 'bbcode' ? `\n\n[b]Languages[/b]: MULTi${langCount}` :
                        format === 'discord' ? `\n\n**Languages**: MULTi${langCount}` :
                        `\n\nLanguages: MULTi${langCount}`;
                }
            }
            if (originalsize || repacksize || installtime) {
                description += format === 'bbcode' ? `\n\n[b]Repack Information[/b]\n[list]` :
                    format === 'discord' ? `\n\n**Repack Information**` :
                    `\n\nRepack Information`;

                const listItems = [];

                if (repacksize) {
                    listItems.push(format === 'bbcode' ? `Repack Size: ${repacksize}` :
                        format === 'discord' ? `Repack Size: ${repacksize}` :
                        `Repack Size: ${repacksize}`);
                }

                if (originalsize) {
                    listItems.push(format === 'bbcode' ? `Original Size: ${originalsize}` :
                        format === 'discord' ? `Original Size: ${originalsize}` :
                        `Original Size: ${originalsize}`);
                }

                if (installtime) {
                    listItems.push(format === 'bbcode' ?
                        `Installation time: [b]${installtime}[/b] on [b]${settings.systemSpecs}[/b]` :
                        format === 'discord' ?
                        `Installation time: **${installtime}** on **${settings.systemSpecs}**` :
                        `Installation time: ${installtime} on ${settings.systemSpecs}`);
                }

                if (settings.requiredRam) {
                    listItems.push(format === 'bbcode' ?
                        `RAM required: [b]${settings.requiredRam}[/b] during installation` :
                        format === 'discord' ?
                        `RAM required: **${settings.requiredRam}** during installation` :
                        `RAM required: ${settings.requiredRam} during installation`);
                }

                // Add list items with proper formatting
                if (format === 'bbcode') {
                    listItems.forEach(item => {
                        description += `\n[*]${item}`;
                    });
                    description += '\n[/list]';
                } else if (format === 'discord') {
                    listItems.forEach(item => {
                        description += `\n• ${item}`;
                    });
                } else {
                    listItems.forEach(item => {
                        description += `\n- ${item}`;
                    });
                }
            }

            if (settings.repackBy) {
                description += `\n\nREPACK BY: ${settings.repackBy}`;
            }

            if (settings.website) {
                description += `\n\nWEBSITE: ${settings.website}`;
            }

            if (settings.includeGreetings && settings.greetings) {
                description += `\n\nGREETINGS TO: ${settings.greetings}`;
            }

            if (settings.customNotes) {
                description += format === 'bbcode' ? `\n\n[b]Additional Notes:[/b]\n${settings.customNotes}` :
                    format === 'discord' ? `\n\n**Additional Notes:**\n${settings.customNotes}` :
                    `\n\nAdditional Notes:\n${settings.customNotes}`;
            }

            if (downloadlink) {
                description += format === 'bbcode' ?
                    `\n\n[size=150][url=${downloadlink}][color=#00ff00]Download Now[/color][/url][/size]` :
                    format === 'discord' ? `\n\n[Download Now](${downloadlink})` :
                    `\n\nDownload: ${downloadlink}`;
            }

            if (format === 'bbcode') description += '[/quote]';
            document.getElementById('output').textContent = description;
        }

        function generateReleaseName() {
            const settings = loadSettings();
            const gameName = document.getElementById('gamename').value;
            const buildNumber = document.getElementById('buildnumber').value;
            const languages = document.getElementById('languages').value;
            const isKaOs = document.getElementById('useKaOsFormat').checked;
            const isBuild = document.getElementById('isBuildNumber').checked;

            if (!gameName) {
                alert('Please enter a game name first');
                return;
            }

            let releaseName = '';

            if (isKaOs) {
                const cleanGameName = gameName.replace(/[^a-zA-Z0-9\s]/g, '').replace(/\s+/g, '.');
                releaseName = cleanGameName;

                if (buildNumber) {
                    releaseName += `.${isBuild ? 'B' + buildNumber : 'v' + buildNumber}`;
                }

                if (languages) {
                    const langCount = languages.split(',').length;
                    if (langCount > 1) {
                        releaseName += `.MULTi${langCount}`;
                    }
                }

                releaseName += '.REPACK-KaOs';
            } else {
                const cleanGameName = gameName
                    .replace(/[^a-zA-Z0-9\s]/g, '')
                    .replace(/\s+/g, '.')
                    .replace(/\.+/g, '.');

                releaseName = cleanGameName;

                if (buildNumber) {
                    releaseName += `.${isBuild ? 'B' + buildNumber : 'v' + buildNumber}`;
                }

                releaseName += `.${settings.repackerName.replace(/\s+/g, '')}`;
            }

            document.getElementById('releasename').value = releaseName;
        }

        function copyToClipboard() {
            const output = document.getElementById('output');
            const text = output.textContent;

            const textArea = document.createElement('textarea');
            textArea.value = text;
            textArea.style.position = 'fixed';
            textArea.style.left = '-9999px';
            document.body.appendChild(textArea);
            textArea.select();

            try {
                document.execCommand('copy');
                const copyBtn = document.getElementById('copyBtn');
                copyBtn.textContent = 'Copied!';
                setTimeout(() => {
                    copyBtn.textContent = 'Copy to Clipboard';
                }, 2000);
            } catch (err) {
                console.error('Failed to copy text: ', err);
            } finally {
                document.body.removeChild(textArea);
            }
        }

        function downloadDescription() {
            const output = document.getElementById('output');
            const text = output.textContent;
            const releaseName = document.getElementById('releasename').value || 'release_description';
            const format = document.getElementById('outputFormat').value;

            // Add appropriate file extension based on format
            const fileExtension = format === 'bbcode' ? '.bbcode.txt' :
                format === 'discord' ? '.discord.txt' : '.Plain.txt';

            const blob = new Blob([text], {
                type: 'text/plain'
            });
            const url = URL.createObjectURL(blob);

            const link = document.createElement('a');
            link.href = url;
            link.download = `${releaseName}${fileExtension}`;

            document.body.appendChild(link);
            link.click();

            document.body.removeChild(link);
            URL.revokeObjectURL(url);
        }

        function updateToggleLabel() {
            const isBuild = document.getElementById('isBuildNumber').checked;
            const toggleText = document.getElementById('toggleText');
            toggleText.textContent = isBuild ? 'Build' : 'Version';
        }

        function createStars() {
            const starsContainer = document.querySelector('.stars');
            for (let i = 0; i < 150; i++) {
                const star = document.createElement('div');
                const size = Math.random();
                const sizeClass = size < 0.3 ? 'star-1' : size < 0.7 ? 'star-2' : 'star-3';
                star.className = `star ${sizeClass}`;
                star.style.left = `${Math.random() * 100}%`;
                star.style.top = `${Math.random() * 100}%`;
                star.style.animationDelay = `${Math.random() * 5}s`;
                starsContainer.appendChild(star);
            }
        }

        function handleFileUpload(event) {
            const file = event.target.files[0];
            if (!file) return;

            const reader = new FileReader();
            reader.onload = function (e) {
                document.getElementById('importText').value = e.target.result;
                // Clear the file input for future use
                event.target.value = '';
            };
            reader.onerror = function () {
                alert('Error reading file');
            };
            reader.readAsText(file);
        }

        document.addEventListener('DOMContentLoaded', () => {
            createStars();
            const settings = loadSettings();
            if (document.getElementById('repackerName')) {
                document.getElementById('repackerName').value = settings.repackerName;
            }
            document.getElementById('systemSpecs').value = settings.systemSpecs;
            document.getElementById('requiredRam').value = settings.requiredRam;
            document.getElementById('customNotes').value = settings.customNotes || '';
            document.getElementById('includeLossless').checked = settings.includeLossless;
            document.getElementById('includeHeader').checked = settings.includeHeader;
            document.getElementById('repackBy').value = settings.repackBy;
            document.getElementById('website').value = settings.website;
            document.getElementById('greetings').value = settings.greetings;
            document.getElementById('includeGreetings').checked = settings.includeGreetings;
            document.getElementById('useKaOsFormat').checked = settings.useKaOsFormat;
            document.getElementById('outputFormat').value = settings.outputFormat;
            document.getElementById('isBuildNumber').checked = settings.isBuild;
            if (document.getElementById('listAllLanguages')) {
                document.getElementById('listAllLanguages').checked = settings.listAllLanguages;
            }
            updateToggleLabel();
        });

        // Add event listener for format changes
        document.getElementById('outputFormat').addEventListener('change', () => {
            generateDescription();
        });
    </script>
</body>

</html>