from . import models as dec_models
import base64
import uuid
from django.core.files.base import ContentFile

def save_base64_file(base64_data, upload_to='declaration/shared_documents/', file_name=None):
    """
    Saves a base64 encoded file and returns a Django ContentFile
    """
    if ';base64,' in base64_data:
        header, base64_data = base64_data.split(';base64,')

        # Extract file extension
        file_ext = header.split('/')[-1]
    else:
        file_ext = file_name.split('.')[1]

    # Decode base64
    file_data = base64.b64decode(base64_data)

    # Generate unique filename
    file_name = f"{uuid.uuid4()}.{file_ext}"

    return ContentFile(file_data, name=file_name)


def manage_declaration_files(file, declaration):
    """function to save declaration file to maintain history"""
    file_name = file.name
    existing_docs = declaration.documents.all().update(status='I')
    document_instance = dec_models.DeclarationDocument.objects.create(
        declaration=declaration, file_name=file_name, status='A', file_path=file)
    declaration.document_id = document_instance.id
    declaration.save()

    return declaration


def eud_recipient_mails(declaration_id):
    """Function to retrieve emails from previously sent history."""

    to = list(
        dec_models.EUDContactHistory.objects.filter(declaration__id=declaration_id, address_type="to").values_list(
            'email', flat=True))
    cc = list(
        dec_models.EUDContactHistory.objects.filter(declaration__id=declaration_id, address_type="cc").values_list(
            'email', flat=True))

    return to, cc


def update_contact_history(recipient_email, cc_email, declaration):
    """function to maintain contact history"""
    dec_models.EUDContactHistory.objects.filter(declaration=declaration).delete()
    for email in recipient_email:
        dec_models.EUDContactHistory.objects.create(
            declaration=declaration,
            email=email,
            address_type="to"
        )
    for email in cc_email:
        dec_models.EUDContactHistory.objects.create(
            declaration=declaration,
            email=email,
            address_type="cc"
        )
    return True

def update_company_contact_history(recipient_email, cc_email, company_id):
    """function to maintain contact history"""
    dec_models.CompanyContactHistory.objects.filter(company_id=company_id).delete()
    for email in recipient_email:
        dec_models.CompanyContactHistory.objects.create(
            company_id=company_id,
            email=email,
            address_type="to"
        )
    for email in cc_email:
        dec_models.CompanyContactHistory.objects.create(
            company_id=company_id,
            email=email,
            address_type="cc"
        )
    return True


def get_company_recipient_mails(company_id):
    """Function to retrieve emails from previously sent history."""

    to = list(
        dec_models.CompanyContactHistory.objects.filter(company_id=company_id, address_type="to").values_list(
            'email', flat=True))
    cc = list(
        dec_models.CompanyContactHistory.objects.filter(company_id=company_id, address_type="cc").values_list(
            'email', flat=True))

    return to, cc
