import uuid

import requests
from django.conf import settings
from django.contrib.auth.models import User
from django.db import models
from django.utils import timezone


class AppleAccount(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='apple_accounts')
    sub = models.CharField(max_length=255, unique=True)
    client_id = models.CharField(max_length=255)

    # Strava-related fields
    strava_access_token = models.CharField(max_length=255, blank=True, null=True)
    strava_refresh_token = models.CharField(max_length=255, blank=True, null=True)
    strava_expires_at = models.IntegerField(blank=True, null=True)  # Unix timestamp
    strava_athlete_id = models.IntegerField(blank=True, null=True)

    #oauth_state = models.UUIDField(default=uuid.uuid4, unique=True)
    oauth_state = models.UUIDField(editable=False, null=True, blank=True) 

    def __str__(self):
        return f"{self.user.username} - {self.client_id}"

    def is_strava_token_expired(self):
        return self.strava_expires_at is None or self.strava_expires_at < timezone.now().timestamp()
    
    def refresh_strava_token(self):
        if not self.strava_refresh_token:
            return False
        
        token_url = 'https://www.strava.com/oauth/token'
        payload = {
            'client_id': settings.STRAVA_CLIENT_ID,
            'client_secret': settings.STRAVA_CLIENT_SECRET,
            'grant_type': 'refresh_token',
            'refresh_token': self.strava_refresh_token,
        }
        
        response = requests.post(token_url, data=payload)
        if response.status_code == 200:
            data = response.json()
            self.strava_access_token = data.get('access_token')
            self.strava_refresh_token = data.get('refresh_token')
            self.strava_expires_at = data.get('expires_at')
            self.save()
            return True
        else:
            # Handle errors appropriately
            return False
