
from pydantic import BaseModel, Field, field_validator

class Angetriebene_Kurve(BaseModel):
    teileid: str
    x: float
    y:float
    drehung: float = Field(default=0.0,description="Rotation der Kurve")
    hoehe0: float = Field(default=0.0,description="Hoehe Anfang der Kurve")
    hoehe1: float = Field(default=0.0,description="Hoehe Ende der Kurve")
    kurvenrichtung: str = Field(description="Kurvenrichtung der Kurve")
    antriebNebenStrecke: str =Field(description="wo die Angetriebene Strecke ist abhängig von der kurvenrichtung")
    winkel: int = Field(description="Der Winkel der Kurve")
    
    @property
    def antrieb(self):
        if self.antriebNebenStrecke == "Aussen":
            self.antriebNebenStrecke = "außen"
        elif self.antriebNebenStrecke == "Innen": 
            self.antriebNebenStrecke = "innen"
        return self.antriebNebenStrecke
    @property
    def hight_zwischen(self):
        return ((self.hoehe0 + self.hoehe1) /2)   
    @classmethod
    def from_merkmale(cls, teileid: str, x: float, y: float, merkmale: dict) -> 'Angetriebene_Kurve':
        hoehe0 = float(merkmale.get("Höhe Anfang")) * 1000
        hoehe1 = float(merkmale.get("Höhe Ende")) * 1000
        winkel = int(merkmale.get("Kurvenwinkel"))
        kurvenrichtung = merkmale.get("Kurvenrichtung")
        antriebNebenstrecke = merkmale.get("AntriebNebenStrecke")
        try:
            drehung = float(merkmale.get("Drehung"))
        except Exception as e:
            drehung = 0.0
        
        return cls(
            teileid = teileid,
            x = x,
            y = y,
            drehung = drehung,
            hoehe0 = hoehe0,
            hoehe1 = hoehe1,
            kurvenrichtung = kurvenrichtung,
            antriebNebenStrecke = antriebNebenstrecke,
            winkel = winkel

        )