from typing import List
from uuid import UUID, uuid4
import json
from pathlib import Path
from utils.logging import logger

JSON_FOLDER = Path("ticket_imports")

async def process_tickets(tickets: List[dict], reporter_id: UUID, project_id: UUID):
    import_id = str(uuid4())
    status_file = JSON_FOLDER / f"{import_id}.json"
    JSON_FOLDER.mkdir(exist_ok=True)

    logger.info(f"Starting background task")
    status_data = {
        "import_id": import_id,
        "status": "in_progress",
        "total": len(tickets),
        "processed": 0,
        "failed": 0,
        "message": "Import in progress...",
        "tickets": []
    }
    status_file.write_text(json.dumps(status_data, indent=2))



    try:
        for i, row in enumerate(tickets, 1):
            ticket = {
                "id": str(uuid4()),
                "project_id": str(project_id),
                "reporter_id": str(reporter_id),
                "ticket_number": row.get("ticket_number"),
                "title": row.get("title"),
                "description": row.get("description"),
                "type": row.get("type"),
                "status": row.get("status", "BACKLOG"),
                "priority": row.get("priority", "MEDIUM"),
                "story_points": row.get("story_points"),
                "due_date": row.get("due_date"),
                "environment": row.get("environment"),
                "deployment_status": row.get("deployment_status", "NOT_DEPLOYED"),
                "deployment_url": row.get("deployment_url"),
                "deployment_notes": row.get("deployment_notes"),
            }
            status_data["tickets"].append(ticket)
            status_data["processed"] = i
            status_data["message"] = f"Processing ticket {i} of {len(tickets)}..."
            status_file.write_text(json.dumps(status_data, indent=2))

        status_data.update({
            "status": "done",
            "message": f"Done! Successfully imported {len(tickets)} tickets."
        })
        status_file.write_text(json.dumps(status_data, indent=2))

    except Exception as e:
        status_data.update({
            "status": "failed",
            "message": f"Import failed: {str(e)}"
        })
        status_file.write_text(json.dumps(status_data, indent=2))