"""Tek bir video sahnesini (segment) temsil eden model."""
from __future__ import annotations
from dataclasses import dataclass, field, asdict
from pathlib import Path
from typing import Optional
import uuid


@dataclass
class Sahne:
    id: str = field(default_factory=lambda: uuid.uuid4().hex[:8])
    sira: int = 0
    prompt: str = ""
    negatif_prompt: str = "blurry, low quality, distorted face, extra fingers, multiple people, cartoon"
    sure: int = 20
    giris_gorsel: str = ""          # resim yolu (ilk sahne için kullanıcı, diğerleri için önceki son kare)
    ses_yolu: str = ""              # segmentin ses parçası (ses bağımsızsa boş)
    cikis_video: str = ""           # üretilmiş segment video yolu
    son_kare: str = ""              # üretilen son kare önizleme
    seed: int = -1                  # -1 = rastgele
    guidance_scale: float = 3.5
    steps: int = 30
    face_swap_kaynak: str = ""      # boşsa global face swap kullanılır
    face_swap_aktif: bool = True
    durum: str = "beklemede"        # beklemede | uretiliyor | tamamlandi | hata | iptal
    hata_mesaji: str = ""
    baslama_zamani: float = 0.0
    bitis_zamani: float = 0.0

    def dict(self) -> dict:
        return asdict(self)

    @classmethod
    def sozlukten(cls, d: dict) -> "Sahne":
        alanlar = {f.name for f in cls.__dataclass_fields__.values()}
        return cls(**{k: v for k, v in d.items() if k in alanlar})

    def hazir_mi(self) -> bool:
        return bool(self.giris_gorsel) and Path(self.giris_gorsel).exists()
