#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
实时文件扫描API
用于动态获取用户目录中的HTML文件列表
"""

import http.server
import socketserver
import json
import os
import re
from datetime import datetime

PORT = 3003
BASE_DIR = "/var/www/html/internal/users"

class FileScanHandler(http.server.BaseHTTPRequestHandler):
    def do_OPTIONS(self):
        self.send_response(200)
        self.send_header('Access-Control-Allow-Origin', '*')
        self.send_header('Access-Control-Allow-Methods', 'GET, OPTIONS')
        self.send_header('Access-Control-Allow-Headers', 'Content-Type')
        self.end_headers()
    
    def do_GET(self):
        if self.path.startswith('/scan-files/'):
            # 提取文件夹名
            folder = self.path.replace('/scan-files/', '').split('?')[0]
            self.scan_and_return(folder)
        else:
            self.send_error_response('未知接口', 404)
    
    def scan_and_return(self, folder):
        """扫描文件夹并返回HTML文件列表"""
        # 安全检查
        if '..' in folder or '/' in folder or not folder:
            self.send_error_response('非法文件夹名')
            return
        
        user_dir = os.path.join(BASE_DIR, folder)
        
        if not os.path.exists(user_dir):
            self.send_error_response('文件夹不存在')
            return
        
        try:
            files = []
            # 扫描目录中的所有HTML文件
            for filename in os.listdir(user_dir):
                if filename.endswith('.html') and filename != 'index.html':
                    file_path = os.path.join(user_dir, filename)
                    stat = os.stat(file_path)
                    
                    # 提取文件名（不含扩展名）
                    name = filename.replace('.html', '')
                    
                    files.append({
                        'name': name,
                        'file': filename,
                        'date': datetime.fromtimestamp(stat.st_mtime).strftime('%Y-%m-%d'),
                        'size': stat.st_size
                    })
            
            # 按修改时间排序（最新的在前）
            files.sort(key=lambda x: x['date'], reverse=True)
            
            self.send_success_response({'files': files, 'count': len(files)})
            print(f"[扫描成功] {folder}: 找到 {len(files)} 个文件")
            
        except Exception as e:
            print(f"[扫描失败] {e}")
            self.send_error_response(str(e))
    
    def send_success_response(self, data):
        self.send_response(200)
        self.send_header('Content-Type', 'application/json')
        self.send_header('Access-Control-Allow-Origin', '*')
        self.end_headers()
        response = {'success': True, 'data': data}
        self.wfile.write(json.dumps(response, ensure_ascii=False).encode('utf-8'))
    
    def send_error_response(self, error, code=200):
        self.send_response(code)
        self.send_header('Content-Type', 'application/json')
        self.send_header('Access-Control-Allow-Origin', '*')
        self.end_headers()
        response = {'success': False, 'error': error}
        self.wfile.write(json.dumps(response).encode('utf-8'))
    
    def log_message(self, format, *args):
        print(f"[{self.log_date_time_string()}] {format % args}")

if __name__ == '__main__':
    with socketserver.TCPServer(("127.0.0.1", PORT), FileScanHandler) as httpd:
        print(f"实时文件扫描API已启动: http://127.0.0.1:{PORT}")
        print("接口: GET /scan-files/{folder}")
        print("按 Ctrl+C 停止服务")
        httpd.serve_forever()
