#!/usr/bin/env python3
"""Simple HTTP server with file upload support"""

import http.server
import socketserver
import os
import urllib.parse

PORT = 9000
UPLOAD_DIR = "/var/www/html/workspace"

class UploadHandler(http.server.SimpleHTTPRequestHandler):
    def do_POST(self):
        if self.path == '/upload':
            content_type = self.headers.get('content-type')
            if content_type and 'multipart/form-data' in content_type:
                self.handle_upload()
            else:
                self.send_error(400, "Invalid content type")
        else:
            self.send_error(404)

    def handle_upload(self):
        content_length = int(self.headers.get('Content-Length', 0))
        boundary = self.headers.get('Content-Type').split('boundary=')[-1]
        
        post_data = self.rfile.read(content_length)
        
        # Parse multipart data
        parts = post_data.split(b'--' + boundary.encode())
        for part in parts:
            if b'Content-Disposition:' in part and b'filename=' in part:
                # Extract filename
                filename_start = part.find(b'filename="') + 10
                filename_end = part.find(b'"', filename_start)
                filename = part[filename_start:filename_end].decode('utf-8')
                
                if filename:
                    # Extract file content
                    content_start = part.find(b'\r\n\r\n') + 4
                    content_end = part.rfind(b'\r\n--')
                    content = part[content_start:content_end]
                    
                    # Save file
                    filepath = os.path.join(UPLOAD_DIR, filename)
                    with open(filepath, 'wb') as f:
                        f.write(content)
                    
                    self.send_response(200)
                    self.send_header('Content-Type', 'text/html; charset=utf-8')
                    self.end_headers()
                    self.wfile.write(f"✅ 文件 {filename} 上传成功！<br><a href='/'>返回</a>".encode())
                    return
        
        self.send_error(400, "No file found")

    def do_GET(self):
        if self.path == '/upload' or self.path == '/upload.html':
            self.path = '/upload.html'
        super().do_GET()

os.chdir(UPLOAD_DIR)
with socketserver.TCPServer(("", PORT), UploadHandler) as httpd:
    print(f"Server running on port {PORT}")
    httpd.serve_forever()
