# python3 -m pip install Flask
import json
import os
import threading
from pathlib import Path
from flask import Flask, request, jsonify
app = Flask(__name__)
FILE = Path(os.environ.get('DATA_FILE', Path(__file__).parent / 'data' / 'store.json'))
FILE.parent.mkdir(parents=True, exist_ok=True)
LOCK = threading.Lock()  # 单进程多线程；多进程部署请使用数据库版
@app.after_request
def cors(response):
    response.headers['Access-Control-Allow-Origin'] = '*'
    return response
@app.post('/api/<action>')
@app.post('/tinywebdb/api/<action>')
def api(action):
    tag, value = request.form.get('tag', ''), request.form.get('value', '')
    if not tag: return jsonify(['ERROR', 'Tag cannot be empty'])
    try:
        with LOCK:
            data = json.loads(FILE.read_text(encoding='utf-8')) if FILE.exists() else {}
            if action == 'storeavalue':
                data[tag] = value  # value 是 JSON 文本，原样存取
                temporary = FILE.with_name(FILE.name + '.tmp')
                temporary.write_text(json.dumps(data, ensure_ascii=False), encoding='utf-8')
                temporary.replace(FILE)
                return jsonify(['STORED', tag, value])
            if action == 'getvalue': return jsonify(['VALUE', tag, data.get(tag, '')])
            return jsonify(['ERROR', 'Unknown action: ' + action])
    except (OSError, ValueError):
        return jsonify(['ERROR', 'Storage failed']), 500
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 3000)))
