# python3 -m pip install Flask PyMySQL
import os
import pymysql
from flask import Flask, request, jsonify
app = Flask(__name__)
def connect():
    return pymysql.connect(host=os.environ.get('DB_HOST', '127.0.0.1'), port=int(os.environ.get('DB_PORT', 3306)),
                           user=os.environ['DB_USER'], password=os.environ['DB_PASS'], database=os.environ.get('DB_NAME', 'tinywebdb'),
                           charset='utf8mb4', autocommit=True)
@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):
    if os.environ.get('API_KEY') and request.headers.get('X-API-Key') != os.environ['API_KEY']:
        return jsonify(['ERROR', 'Unauthorized']), 401
    tag, value = request.form.get('tag', ''), request.form.get('value', '')
    if not tag: return jsonify(['ERROR', 'Tag cannot be empty'])
    if action not in ('storeavalue', 'getvalue'): return jsonify(['ERROR', 'Unknown action: ' + action])
    connection = None
    try:
        connection = connect()
        with connection.cursor() as cursor:
            if action == 'storeavalue':
                cursor.execute('INSERT INTO store (tag, value) VALUES (%s, %s) ON DUPLICATE KEY UPDATE value = %s, updated_at = NOW()', (tag, value, value))
                return jsonify(['STORED', tag, value])
            cursor.execute('SELECT value FROM store WHERE tag = %s', (tag,))
            row = cursor.fetchone()
            return jsonify(['VALUE', tag, row[0] if row else ''])
    except (pymysql.MySQLError, KeyError):
        return jsonify(['ERROR', 'Database operation failed'])
    finally:
        if connection is not None: connection.close()
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 3000)))
