<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Upload Photos - Rosy's Photography</title>
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;600&family=Source+Sans+3:wght@300;400;500&display=swap" rel="stylesheet">
    <style>
        :root {
            --cream: #e8e2d9;
            --warm-white: #d9d2c7;
            --soft-brown: #7a6b5a;
            --deep-brown: #4a3f35;
            --accent-sage: #6b7c68;
            --accent-terracotta: #b8856a;
            --text-dark: #3d3530;
            --text-light: #5c524a;
        }

        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: 'Source Sans 3', -apple-system, BlinkMacSystemFont, sans-serif;
            background-color: var(--cream);
            color: var(--text-dark);
            min-height: 100vh;
            display: flex;
            flex-direction: column;
            align-items: center;
            padding: 40px 20px;
        }

        .container {
            max-width: 500px;
            width: 100%;
        }

        h1 {
            font-family: 'Playfair Display', Georgia, serif;
            font-size: 2rem;
            font-weight: 400;
            color: var(--deep-brown);
            text-align: center;
            margin-bottom: 10px;
        }

        .subtitle {
            text-align: center;
            color: var(--text-light);
            margin-bottom: 30px;
        }

        .upload-form {
            background: white;
            border-radius: 12px;
            padding: 30px;
            box-shadow: 0 4px 20px rgba(74, 63, 53, 0.1);
        }

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

        label {
            display: block;
            font-weight: 500;
            margin-bottom: 8px;
            color: var(--deep-brown);
        }

        input[type="password"],
        input[type="text"],
        select {
            width: 100%;
            padding: 12px 15px;
            border: 2px solid var(--warm-white);
            border-radius: 8px;
            font-size: 1rem;
            font-family: inherit;
            transition: border-color 0.3s;
        }

        input[type="password"]:focus,
        input[type="text"]:focus,
        select:focus {
            outline: none;
            border-color: var(--accent-sage);
        }

        .drop-zone {
            border: 2px dashed var(--soft-brown);
            border-radius: 12px;
            padding: 40px 20px;
            text-align: center;
            cursor: pointer;
            transition: all 0.3s;
            background: var(--cream);
        }

        .drop-zone:hover,
        .drop-zone.drag-over {
            border-color: var(--accent-terracotta);
            background: #f5f0e8;
        }

        .drop-zone-icon {
            font-size: 3rem;
            margin-bottom: 10px;
        }

        .drop-zone-text {
            color: var(--text-light);
        }

        .drop-zone-text strong {
            color: var(--accent-terracotta);
        }

        .file-input {
            display: none;
        }

        .preview-container {
            margin-top: 20px;
            display: none;
        }

        .preview-container.active {
            display: block;
        }

        .preview-image {
            width: 100%;
            max-height: 300px;
            object-fit: contain;
            border-radius: 8px;
            background: var(--warm-white);
        }

        .file-info {
            margin-top: 10px;
            padding: 10px;
            background: var(--cream);
            border-radius: 6px;
            font-size: 0.9rem;
            color: var(--text-light);
        }

        .btn {
            width: 100%;
            padding: 15px;
            background: linear-gradient(135deg, var(--accent-sage) 0%, #5a6b58 100%);
            color: white;
            border: none;
            border-radius: 8px;
            font-size: 1.1rem;
            font-weight: 500;
            cursor: pointer;
            transition: transform 0.2s, box-shadow 0.2s;
        }

        .btn:hover {
            transform: translateY(-2px);
            box-shadow: 0 6px 20px rgba(107, 124, 104, 0.3);
        }

        .btn:disabled {
            background: var(--warm-white);
            color: var(--text-light);
            cursor: not-allowed;
            transform: none;
            box-shadow: none;
        }

        .message {
            margin-top: 20px;
            padding: 15px;
            border-radius: 8px;
            text-align: center;
            display: none;
        }

        .message.success {
            display: block;
            background: #e8f5e9;
            color: #2e7d32;
        }

        .message.error {
            display: block;
            background: #ffebee;
            color: #c62828;
        }

        .uploaded-image {
            margin-top: 15px;
            text-align: center;
        }

        .uploaded-image img {
            max-width: 100%;
            max-height: 200px;
            border-radius: 8px;
        }

        .uploaded-path {
            margin-top: 10px;
            padding: 10px;
            background: #f5f5f5;
            border-radius: 6px;
            font-family: monospace;
            font-size: 0.85rem;
            word-break: break-all;
        }

        .back-link {
            display: block;
            text-align: center;
            margin-top: 25px;
            color: var(--soft-brown);
            text-decoration: none;
        }

        .back-link:hover {
            color: var(--deep-brown);
        }

        .size-note {
            font-size: 0.85rem;
            color: var(--text-light);
            margin-top: 5px;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>Upload Photo</h1>
        <p class="subtitle">Add new photos to your gallery</p>

        <form class="upload-form" id="uploadForm">
            <div class="form-group">
                <label for="password">Password</label>
                <input type="password" id="password" name="password" placeholder="Enter upload password" required>
            </div>

            <div class="form-group">
                <label for="category">Category</label>
                <select id="category" name="category">
                    <option value="landscapes">Landscapes</option>
                    <option value="historic">Historic Sites</option>
                </select>
            </div>

            <div class="form-group">
                <label for="title">Photo Title</label>
                <input type="text" id="title" name="title" placeholder="e.g. Golden Hour in the Forest">
                <p class="size-note">Optional - will use filename if left empty</p>
            </div>

            <div class="form-group">
                <label>Photo</label>
                <div class="drop-zone" id="dropZone">
                    <div class="drop-zone-icon">📷</div>
                    <p class="drop-zone-text">
                        Drag & drop your photo here<br>
                        or <strong>click to browse</strong>
                    </p>
                </div>
                <input type="file" id="fileInput" name="photo" class="file-input" accept="image/*">
                <p class="size-note">Accepts JPG, PNG, GIF, WebP up to 20MB - any dimensions</p>
            </div>

            <div class="preview-container" id="previewContainer">
                <img src="" alt="Preview" class="preview-image" id="previewImage">
                <div class="file-info" id="fileInfo"></div>
            </div>

            <button type="submit" class="btn" id="submitBtn" disabled>Upload Photo</button>
        </form>

        <div class="message" id="message"></div>

        <a href="/photography/" class="back-link">← Back to Gallery</a>
    </div>

    <script>
        const dropZone = document.getElementById('dropZone');
        const fileInput = document.getElementById('fileInput');
        const previewContainer = document.getElementById('previewContainer');
        const previewImage = document.getElementById('previewImage');
        const fileInfo = document.getElementById('fileInfo');
        const submitBtn = document.getElementById('submitBtn');
        const uploadForm = document.getElementById('uploadForm');
        const message = document.getElementById('message');

        let selectedFile = null;

        // Click to browse
        dropZone.addEventListener('click', () => fileInput.click());

        // Drag and drop
        dropZone.addEventListener('dragover', (e) => {
            e.preventDefault();
            dropZone.classList.add('drag-over');
        });

        dropZone.addEventListener('dragleave', () => {
            dropZone.classList.remove('drag-over');
        });

        dropZone.addEventListener('drop', (e) => {
            e.preventDefault();
            dropZone.classList.remove('drag-over');
            const files = e.dataTransfer.files;
            if (files.length) {
                handleFile(files[0]);
            }
        });

        // File input change
        fileInput.addEventListener('change', () => {
            if (fileInput.files.length) {
                handleFile(fileInput.files[0]);
            }
        });

        function handleFile(file) {
            // Check if it's an image
            if (!file.type.startsWith('image/')) {
                showMessage('Please select an image file', 'error');
                return;
            }

            // Check size (20MB)
            if (file.size > 20 * 1024 * 1024) {
                showMessage('File is too large. Maximum size is 20MB.', 'error');
                return;
            }

            selectedFile = file;

            // Show preview
            const reader = new FileReader();
            reader.onload = (e) => {
                previewImage.src = e.target.result;

                // Get image dimensions
                const img = new Image();
                img.onload = () => {
                    const sizeKB = (file.size / 1024).toFixed(1);
                    const sizeMB = (file.size / (1024 * 1024)).toFixed(2);
                    const sizeText = file.size > 1024 * 1024 ? `${sizeMB} MB` : `${sizeKB} KB`;
                    fileInfo.innerHTML = `
                        <strong>${file.name}</strong><br>
                        ${img.width} × ${img.height} pixels &nbsp;•&nbsp; ${sizeText}
                    `;
                };
                img.src = e.target.result;
            };
            reader.readAsDataURL(file);

            previewContainer.classList.add('active');
            submitBtn.disabled = false;
            message.className = 'message';
        }

        function showMessage(text, type) {
            message.textContent = text;
            message.className = `message ${type}`;
        }

        // Form submit
        uploadForm.addEventListener('submit', async (e) => {
            e.preventDefault();

            if (!selectedFile) {
                showMessage('Please select a photo', 'error');
                return;
            }

            const password = document.getElementById('password').value;
            if (!password) {
                showMessage('Please enter the password', 'error');
                return;
            }

            submitBtn.disabled = true;
            submitBtn.textContent = 'Uploading...';

            const formData = new FormData();
            formData.append('password', password);
            formData.append('category', document.getElementById('category').value);
            formData.append('title', document.getElementById('title').value);
            formData.append('photo', selectedFile);

            try {
                const response = await fetch('/upload-api/upload', {
                    method: 'POST',
                    body: formData
                });

                const result = await response.json();

                if (response.ok && result.success) {
                    message.innerHTML = `
                        <strong>Photo uploaded successfully!</strong>
                        <div class="uploaded-image">
                            <img src="${result.path}" alt="Uploaded">
                        </div>
                        <div class="uploaded-path">Path: ${result.path}</div>
                    `;
                    message.className = 'message success';

                    // Reset form for another upload
                    selectedFile = null;
                    previewContainer.classList.remove('active');
                    fileInput.value = '';
                    document.getElementById('title').value = '';
                    submitBtn.textContent = 'Upload Another';
                    submitBtn.disabled = false;
                } else {
                    showMessage(result.error || 'Upload failed', 'error');
                    submitBtn.disabled = false;
                    submitBtn.textContent = 'Upload Photo';
                }
            } catch (err) {
                showMessage('Connection error. Please try again.', 'error');
                submitBtn.disabled = false;
                submitBtn.textContent = 'Upload Photo';
            }
        });
    </script>
</body>
</html>
