import requests
from django.conf import settings

from ..exceptions import RecordingNotFound, RecordingDownloadFailed


class RecordingService:
    def __init__(self, twilio_client):
        self.twilio_client = twilio_client
        self.account_sid = settings.TWILIO_ACCOUNT_SID
        self.auth_token = settings.TWILIO_AUTH_TOKEN

    def get_latest_call_recording(self, call_sid):
        recordings_list = self.twilio_client.recordings.list(call_sid=call_sid)
        print(len(recordings_list))
        recordings = self.twilio_client.recordings.list(call_sid=call_sid, limit=1)
        if not recordings:
            raise RecordingNotFound()
        return recordings[0]

    def download(self, recording_sid):
        url = f"https://api.twilio.com/2010-04-01/Accounts/{self.account_sid}/Recordings/{recording_sid}.mp3"
        response = requests.get(url, auth=(self.account_sid, self.auth_token), stream=True)
        if response.status_code != 200:
            raise RecordingDownloadFailed()
        return response
    
    def get_call_recording_public_url(self,call_sid: str):
            recording = self.get_latest_call_recording(call_sid)
            media_url = (
                f"https://api.twilio.com/2010-04-01/Accounts/"
                f"{self.twilio_client.account_sid}/Recordings/{recording.sid}.mp3"
            )
            if hasattr(recording, 'media_url'):
                media_url = recording.media_url + ".mp3"
            return media_url

    def get_recording(self, call_sid: str):
            recording = self.get_latest_call_recording(call_sid)
            return recording
