from django.db import models
from django.contrib.auth import get_user_model

User = get_user_model()


class DatabaseBackup(models.Model):
    """Veritabanı yedekleme kayıtlarını tutar"""
    
    STATUS_CHOICES = [
        ('pending', 'Bekliyor'),
        ('in_progress', 'İşleniyor'),
        ('completed', 'Tamamlandı'),
        ('failed', 'Başarısız'),
    ]
    
    BACKUP_TYPE_CHOICES = [
        ('manual', 'Manuel'),
        ('automatic', 'Otomatik'),
    ]
    
    name = models.CharField(max_length=255, verbose_name='Yedek Adı')
    file_path = models.CharField(max_length=500, verbose_name='Dosya Yolu', blank=True, null=True)
    file_size = models.BigIntegerField(verbose_name='Dosya Boyutu (bytes)', null=True, blank=True)
    status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='pending', verbose_name='Durum')
    backup_type = models.CharField(max_length=20, choices=BACKUP_TYPE_CHOICES, default='manual', verbose_name='Yedek Tipi')
    created_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='Oluşturan')
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='Oluşturulma Tarihi')
    completed_at = models.DateTimeField(null=True, blank=True, verbose_name='Tamamlanma Tarihi')
    error_message = models.TextField(blank=True, null=True, verbose_name='Hata Mesajı')
    notes = models.TextField(blank=True, null=True, verbose_name='Notlar')
    
    class Meta:
        verbose_name = 'Veritabanı Yedeği'
        verbose_name_plural = 'Veritabanı Yedekleri'
        ordering = ['-created_at']
    
    def __str__(self):
        return f"{self.name} - {self.get_status_display()}"
    
    def get_file_size_display(self):
        """Dosya boyutunu okunabilir formatta döndürür"""
        if not self.file_size:
            return "N/A"
        
        size = self.file_size
        for unit in ['B', 'KB', 'MB', 'GB']:
            if size < 1024.0:
                return f"{size:.2f} {unit}"
            size /= 1024.0
        return f"{size:.2f} TB"
