import json
from threading import Thread
from celery import shared_task
import logging

import time

from apps.accounts.models import User

from django.conf import settings

from apps.process.utils import get_sec
from apps.process.inference import VocalRemover
from apps.process.handler import start_removing_sounds
from apps.process.models import ProcessedMedia, Media, Status

from mailerlite import MailerLiteApi

# Create a logger for this file
logger = logging.getLogger(__file__)

MLmodel = VocalRemover(device="cuda", model_weights="weights/baseline.pth")

@shared_task(name='ML Sound Task')
def convert(filename, parts, media_id, user_id):
    logger.info(f"File Name: {filename}")
    parts = json.loads(parts)
    # Test if The Parts Are Existing
    ms_parts = []
    for part in parts:
        ms_parts.append([get_sec(part[0]),get_sec(part[1])])
        print("Time Parts: ",part[0],part[1])
    final_video            = ProcessedMedia()
    final_video.user       = User.objects.get(id=user_id)
    final_video.parts      = ms_parts
    final_video.status     = Status.Processing
    final_video.media      = Media.objects.get(id_media=media_id)
    final_video.save()

    # Start The Thread For The Pre-processing ::
    t = Thread(target=start_removing_sounds, args=(MLmodel, ms_parts, filename, final_video.id))
    t.start()
    return final_video.id


@shared_task(name='MailerLite Delete user')
def delete_mailerlite_user(group,user):
    """
    deleting user from mailerlite after 5 min that can use rsend email multiple times
    parameters:
        + group: group name
        + user: user object that return from mailer lite after adding new subscriber
    """
    
    time.sleep(300)
    api = MailerLiteApi(settings.MAILER_LITE_KEY)
    # Remove user from old mailer lite group
    deleted_user = api.groups.delete_subscriber(
        group_id=settings.MAILER_LITE_GROUPS[group],
        subscriber_id=user
    )
    return deleted_user