from flask import Flask, send_from_directory, abort
import os
import re

app = Flask(__name__)

BASE_DIR = "/var/www/apks"

def get_latest_apk(directory):
    """
    Returns the filename of the latest APK based on version number in format:
    apk-release-1.2.apk
    """

    version_pattern = re.compile(r"apk-release-(\d+\.\d+)\.apk$")
    latest_file = None
    latest_version = (0, 0)  # major, minor

    for filename in os.listdir(directory):
        match = version_pattern.match(filename)
        if match:
            version_str = match.group(1)
            major, minor = map(int, version_str.split("."))

            if (major, minor) > latest_version:
                latest_version = (major, minor)
                latest_file = filename

    return latest_file


@app.route("/user")
def download_latest_user():
    drop_dir = os.path.join(BASE_DIR, "drop")
    apk = get_latest_apk(drop_dir)

    if not apk:
        abort(404)

    return send_from_directory(drop_dir, apk, as_attachment=True)


@app.route("/dropdriver")
def download_latest_driver():
    dropdriver_dir = os.path.join(BASE_DIR, "dropdriver")
    apk = get_latest_apk(dropdriver_dir)

    if not apk:
        abort(404)

    return send_from_directory(dropdriver_dir, apk, as_attachment=True)


@app.route("/download/<filename>")
def download_apk(filename):
    if not os.path.exists(os.path.join(BASE_DIR, filename)):
        abort(404)
    return send_from_directory(BASE_DIR, filename, as_attachment=True)


@app.route("/")
def index():
    files = os.listdir(BASE_DIR)
    return "<br>".join([f"<a href='/download/{f}'>{f}</a>" for f in files])


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000)
