# azure_upload.py
import logging
import requests
import os
from urllib.parse import urlparse, parse_qs

def upload_to_azure_blob(sas_url, file_path):
    try:
        with open(file_path, 'rb') as f:
            headers = {
                'x-ms-blob-type': 'BlockBlob',
                'Content-Type': 'audio/wav',
                'x-ms-version': '2021-06-08'
            }
            response = requests.put(sas_url, headers=headers, data=f, verify=False)

            if response.status_code >= 200 and response.status_code < 300:
                logging.info(f"✅ Upload successful: {sas_url}")
                return True
            else:
                logging.error(f"Upload failed with status {response.status_code}: {response.text}")
                return False
    except Exception as e:
        logging.error(f"Azure upload error: {str(e)}")
        return False

def delete_from_azure_blob(sas_url):
    """Delete file from Azure Blob Storage using SAS URL"""
    try:
        # Parse the SAS URL to get the base URL without query parameters
        parsed_url = urlparse(sas_url)
        base_url = f"{parsed_url.scheme}://{parsed_url.netloc}{parsed_url.path}"
        
        # Extract query parameters
        query_params = parse_qs(parsed_url.query)
        
        # Reconstruct the delete URL with SAS parameters
        delete_url = base_url
        if query_params:
            # Convert query parameters back to string
            param_pairs = []
            for key, values in query_params.items():
                for value in values:
                    param_pairs.append(f"{key}={value}")
            delete_url += "?" + "&".join(param_pairs)
        
        headers = {
            'x-ms-version': '2021-06-08'
        }
        
        response = requests.delete(delete_url, headers=headers, verify=False)
        
        if response.status_code in [200, 202, 204]:
            logging.info(f"✅ Azure blob deleted successfully: {base_url}")
            return True
        else:
            logging.warning(f"⚠️ Azure blob deletion failed with status {response.status_code}: {response.text}")
            return False
            
    except Exception as e:
        logging.error(f"❌ Azure blob deletion error: {str(e)}")
        return False

def cleanup_azure_storage(sas_url):
    """Clean up Azure storage after processing"""
    try:
        if delete_from_azure_blob(sas_url):
            logging.info("🧹 Azure storage cleanup completed")
        else:
            logging.warning("⚠️ Azure storage cleanup failed, but continuing...")
    except Exception as e:
        logging.error(f"❌ Azure storage cleanup error: {str(e)}")
