from flask import request
from flask_smorest import Blueprint
from flask.views import MethodView
from src.views.video.utils import VideoManager

video_router = Blueprint('video_router', __name__)

@video_router.route("/videos")
class VideoCRUDRouter(MethodView):
    def __init__(self) -> None:
        self.video_manager = VideoManager()

    def post(self):
        """Create a new video"""
        payload = request.get_json()
        requester_id = request.args.get('requester_id', type=str)
        
        if not requester_id:
            return {"message": "requester_id parameter is required"}, 400
            
        payload['requester_id'] = requester_id
        return self.video_manager.create_video(payload)

    def get(self):
        """Get all videos with optional filtering"""
        requester_id = request.args.get('requester_id', type=str)
        course_id = request.args.get('course_id', type=str)
        module_id = request.args.get('module_id', type=str)
        week_id = request.args.get('week_id', type=str)
        
        if not requester_id:
            return {"message": "requester_id parameter is required"}, 400
            
        return self.video_manager.get_videos(requester_id, course_id, module_id, week_id)

@video_router.route("/videos/<string:video_id>")
class VideoDetailCRUDRouter(MethodView):
    def __init__(self) -> None:
        self.video_manager = VideoManager()

    def get(self, video_id):
        """Get a specific video"""
        requester_id = request.args.get('requester_id', type=str)
        
        if not requester_id:
            return {"message": "requester_id parameter is required"}, 400
            
        return self.video_manager.get_video_by_id(video_id, requester_id)

    def put(self, video_id):
        """Update video details"""
        requester_id = request.args.get('requester_id', type=str)
        payload = request.get_json()
        
        if not requester_id:
            return {"message": "requester_id parameter is required"}, 400
            
        payload['requester_id'] = requester_id
        return self.video_manager.update_video(video_id, payload)

    def delete(self, video_id):
        """Delete a video"""
        requester_id = request.args.get('requester_id', type=str)
        
        if not requester_id:
            return {"message": "requester_id parameter is required"}, 400
            
        return self.video_manager.delete_video(video_id, requester_id)

@video_router.route("/videos/by-course/<string:course_id>")
class VideoByCourseRouter(MethodView):
    def __init__(self) -> None:
        self.video_manager = VideoManager()

    def get(self, course_id):
        """Get all videos for a course"""
        requester_id = request.args.get('requester_id', type=str)
        
        if not requester_id:
            return {"message": "requester_id parameter is required"}, 400
            
        return self.video_manager.get_videos_by_course(course_id, requester_id)
