from flask import Flask, render_template, request, redirect, url_for, flash, jsonify
from flask_sqlalchemy import SQLAlchemy
from redis import Redis
import rq
from download_and_analysis import *
from sqlalchemy.dialects.mysql import LONGTEXT
import config

db = SQLAlchemy()

def create_app():
    app = Flask(__name__)
    app.config['SECRET_KEY'] = 'your_secret_key'
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:Kikca6!!Kikca6!!@localhost/omnibot'
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    db.init_app(app)

    with app.app_context():
        db.create_all()  # Create database tables for our data models

    return db, app

redis_conn = Redis()
queue = rq.Queue('process_video',connection=redis_conn)
db, app = create_app()
class Video(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    url = db.Column(db.String(500), nullable=False)
    title = db.Column(db.String(200))
    status = db.Column(db.String(20), default='pending')
    subtitle = db.Column(LONGTEXT)
    subtitle_zh = db.Column(LONGTEXT)
    summary = db.Column(LONGTEXT)
    summary_zh = db.Column(LONGTEXT)
    filename = db.Column(db.String(255))
    created_at = db.Column(db.DateTime, server_default=db.func.now())
    updated_at = db.Column(db.DateTime, server_default=db.func.now(), server_onupdate=db.func.now())


with app.app_context():
    db.create_all()

@app.route('/', methods=['GET', 'POST'])
def home():
    if request.method == 'POST':
        url = request.form.get('url')
        if url:
            new_video = Video(url=url)
            db.session.add(new_video)
            db.session.commit()
            job = queue.enqueue(process_video, new_video.id, job_timeout=1000) 
            flash('Video submitted successfully!', 'success')
            return redirect(url_for('home'))
        else:
            flash('Please enter a valid URL', 'error')
    
    videos = Video.query.order_by(Video.id.desc()).all()
    return render_template('home.html', videos=videos)


@app.route('/api/video', methods=['GET'])
def get_video_details():
    video_id = request.args.get('id')
    if not video_id:
        return jsonify({"error": "No video ID provided"}), 400
    
    video = Video.query.get(video_id)
    if not video:
        return jsonify({"error": "Video not found"}), 404
    
    video_details = {
        "id": video.id,
        "url": video.url,
        "title": video.title,
        "status": video.status,
        "subtitle": video.subtitle,
        "subtitle_zh": video.subtitle_zh,
        "summary": video.summary,
        "summary_zh": video.summary_zh,
        "filename": video.filename,
        "created_at": video.created_at,
        "updated_at": video.updated_at
    }
    
    return jsonify(video_details), 200

if __name__ == '__main__':
    app.run(debug=True)