import os
import posixpath
import re
from django.utils.text import slugify

from learn.models import Question_Bank


ALLOWED_VIDEO_EXTENSIONS = {
    ".mp4",
    ".mov",
    ".m4v",
    ".webm",
    ".avi",
    ".mkv",
}

QUESTION_NUMBER_PATTERN = re.compile(
    r"^(?:q(?:uestion)?[\s_-]*)?\(?(\d+)\)?$",
    re.IGNORECASE,
)


def explanation_video_storage():
    return Question_Bank._meta.get_field("explanation_video").storage


def mock_video_folder(mock_test):
    """Storage-relative folder clients use inside the Space's media folder."""
    title_folder = slugify(mock_test.mock_title or "") or "mock-{0}".format(mock_test.id)
    return posixpath.join("questions", "explanation_video", title_folder)


def parse_question_number(filename):
    stem, extension = os.path.splitext(os.path.basename(filename or ""))
    extension = extension.lower()
    if extension not in ALLOWED_VIDEO_EXTENSIONS:
        raise ValueError("Unsupported video extension: {0}".format(extension or "none"))

    match = QUESTION_NUMBER_PATTERN.fullmatch(stem.strip())
    if not match:
        raise ValueError(
            "Filename must be a question number, for example 1.mp4, (1).mp4 or Q1.mp4."
        )
    return int(match.group(1)), extension
