from fastapi import APIRouter, UploadFile, File, Form, Depends

from src.controllers.events.event_service import create_event, get_event, get_all_events, apply_events
from src.controllers.auth_service import verify_token
from src.service.units import convert_to_ist_datetime
from src.models.event_schema import Event
from src.models.participant_schema import Participant

router = APIRouter()

@router.post("/event")
async def create_new_event(
    name: str = Form(...),
    organizer: str = Form(...),
    venue: str = Form(...),
    start_date: str = Form(...),
    end_date: str = Form(...),
    latitude: float = Form(...),
    longitude: float = Form(...),
    category: str = Form(...),
    category_class: str = Form(...),
    competitor: str = Form(...),
    header_image: UploadFile = File(...),
    footer_image: UploadFile = File(...),
    kml_file: UploadFile = File(...),
    user=Depends(verify_token)
):
    data = {
        "name": name,
        "organizer": organizer,
        "venue": venue,
        "start_date": convert_to_ist_datetime(start_date, use_current_time=False),
        "end_date": convert_to_ist_datetime(end_date, use_current_time=False),
        "latitude": latitude,
        "longitude": longitude,
        "category": category,
        "category_class": category_class,
        "competitor": competitor
    }
    return await create_event(data, header_image, footer_image, kml_file)

@router.get("/event/{event_id}", response_model=Event)
async def get_event_by_id(event_id: str,  user=Depends(verify_token)):
    return get_event(event_id)

@router.get('/event')
async def get_events(user= Depends(verify_token)):
    return get_all_events()

@router.post('/event/join')
async def join_event(payload: Participant, user= Depends(verify_token)):
    return apply_events(payload)
