from flask import Flask, request, send_file, render_template_string
import yt_dlp
import os
import uuid

app = Flask(__name__)

HTML_FORM = """
<h2>YouTube Downloader</h2>
<form method="POST">
  <label>Video URL:</label><br>
  <input type="text" name="url" required><br><br>
  <label>Format:</label><br>
  <select name="format">
    <option value="mp4">MP4 (Video)</option>
    <option value="mp3">MP3 (Audio)</option>
  </select><br><br>
  <button type="submit">Download</button>
</form>
"""

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        url = request.form.get('url')
        format_type = request.form.get('format', 'mp4').lower()
        filename = f"{uuid.uuid4()}.{format_type}"
        output_path = os.path.join("/tmp", filename)

        ydl_opts = {
            'outtmpl': output_path
        }

        if format_type == "mp3":
            ydl_opts.update({
                'format': 'bestaudio/best',
                'postprocessors': [{
                    'key': 'FFmpegExtractAudio',
                    'preferredcodec': 'mp3',
                    'preferredquality': '192',
                }],
            })
        else:
            ydl_opts.update({
                'format': 'bestvideo+bestaudio',
                'merge_output_format': 'mp4'
            })

        try:
            with yt_dlp.YoutubeDL(ydl_opts) as ydl:
                ydl.download([url])
            return send_file(output_path, as_attachment=True, download_name=filename)

        except Exception as e:
            return f"❌ Error: {str(e)}"
    return render_template_string(HTML_FORM)

if __name__ == '__main__':
    app.run(debug=True, port=5000)
