# your_app/utils/file_upload_paths.py
import os
import random
from django.utils import timezone


def teacher_task_attachment_upload_path(instance, filename):
    """
    Generate upload path for teacher task attachments (ClassTask):
    tasks/class_tasks/{school_id}/{academic_year_id}/{teacher_id}/{task_id}/{filename}
    """
    ext = filename.split(".")[-1] if "." in filename else ""
    timestamp = timezone.now().strftime("%Y%m%d_%H%M%S")

    # Get task ID and teacher ID
    task_id = getattr(instance, "id", None)
    teacher_id = getattr(instance, "posted_by_id", None)

    new_filename = (
        f"attachment_{task_id}_{timestamp}.{ext}"
        if ext
        else f"attachment_{task_id}_{timestamp}"
    )

    # Get school and academic year info
    school_id = "default"
    academic_year_id = "default"

    try:
        if hasattr(instance, "academic_class") and instance.academic_class:
            academic_year = instance.academic_class.academic_year
            if academic_year:
                if hasattr(academic_year, "school_id"):
                    school_id = academic_year.school_id
                academic_year_id = academic_year.id
    except:
        pass

    return f"tasks/class_tasks/{school_id}/{academic_year_id}/{teacher_id}/{task_id}/{new_filename}"


def student_homework_upload_path(instance, filename):
    """
    Generate upload path for student homework files
    Format: student/homework/[random_number]_[student_id]_[student_name]/[filename]
    """
    # Get student info from the instance
    # For ClassTask (StudentTaskItem)
    if hasattr(instance, "student_task") and instance.student_task:
        student = instance.student_task.student
        student_id = student.id
        student_name = f"{student.first_name}_{student.last_name}".replace(" ", "_")
    # For SpecificTask (SpecificStudentTaskItem)
    elif hasattr(instance, "assignment") and instance.assignment:
        student = instance.assignment.student
        student_id = student.id
        student_name = f"{student.first_name}_{student.last_name}".replace(" ", "_")
    else:
        # Fallback
        student_id = "unknown"
        student_name = "unknown"

    # Generate random number
    random_num = random.randint(1000, 9999)

    # Create folder name
    folder_name = f"{random_num}_{student_id}_{student_name}"

    # Get original filename extension
    ext = filename.split(".")[-1] if "." in filename else ""
    base_filename = os.path.splitext(filename)[0]

    # Clean filename
    base_filename = "".join(e for e in base_filename if e.isalnum() or e in "._-")

    # Create new filename with timestamp
    timestamp = timezone.now().strftime("%Y%m%d_%H%M%S")
    new_filename = f"{base_filename}_{timestamp}.{ext}" if ext else base_filename

    # Full path: student/homework/folder_name/filename
    return os.path.join("student", "homework", folder_name, new_filename)


def specific_task_attachment_upload_path(instance, filename):
    """
    Generate upload path for specific task attachments:
    tasks/specific_tasks/{school_id}/{academic_year_id}/{teacher_id}/{task_id}/{filename}
    """
    ext = filename.split(".")[-1] if "." in filename else ""
    timestamp = timezone.now().strftime("%Y%m%d_%H%M%S")

    task_id = getattr(instance, "id", None)
    teacher_id = getattr(instance, "created_by_id", None)

    new_filename = (
        f"specific_attachment_{task_id}_{timestamp}.{ext}"
        if ext
        else f"specific_attachment_{task_id}_{timestamp}"
    )

    # Get school and academic year info
    school_id = "default"
    academic_year_id = "default"

    try:
        if hasattr(instance, "assignments") and instance.assignments.exists():
            first_assignment = instance.assignments.first()
            if first_assignment and first_assignment.enrollment:
                academic_year = first_assignment.enrollment.academic_class.academic_year
                if academic_year:
                    if hasattr(academic_year, "school_id"):
                        school_id = academic_year.school_id
                    academic_year_id = academic_year.id
    except:
        pass

    return f"tasks/specific_tasks/{school_id}/{academic_year_id}/{teacher_id}/{task_id}/{new_filename}"


def specific_task_question_attachment_upload_path(instance, filename):
    """
    Generate upload path for specific task question attachments:
    tasks/specific_questions/{school_id}/{academic_year_id}/{task_id}/{question_id}/{filename}
    """
    ext = filename.split(".")[-1] if "." in filename else ""
    timestamp = timezone.now().strftime("%Y%m%d_%H%M%S")

    task_id = getattr(instance, "specific_task_id", None)
    question_id = getattr(instance, "id", None)

    new_filename = (
        f"question_{question_id}_{timestamp}.{ext}"
        if ext
        else f"question_{question_id}_{timestamp}"
    )

    # Get school and academic year info
    school_id = "default"
    academic_year_id = "default"

    try:
        if hasattr(instance, "specific_task") and instance.specific_task:
            if instance.specific_task.assignments.exists():
                first_assignment = instance.specific_task.assignments.first()
                if first_assignment and first_assignment.enrollment:
                    academic_year = (
                        first_assignment.enrollment.academic_class.academic_year
                    )
                    if academic_year:
                        if hasattr(academic_year, "school_id"):
                            school_id = academic_year.school_id
                        academic_year_id = academic_year.id
    except:
        pass

    return f"tasks/specific_questions/{school_id}/{academic_year_id}/{task_id}/{question_id}/{new_filename}"
