

import inspect
from dataclasses import dataclass

from configs.firebase import db
from V2.functions.main import DocumentData


@dataclass(kw_only=True)
class Address(DocumentData):
    name:str
    address1:str
    address2:str|None
    city:str
    state:str
    zip:str
    country:str
    countryCode:str
    formattedAddress:str = ""
    company:str|None = None
    email:str|None = None
    phone:str|None = None
    default:bool|None = False

    def __post_init__(self):
        if not self.formattedAddress: self.formattedAddress = f"{self.name} \n{self.address1} , {self.city} , {self.state} \n {self.zip}, {self.country}"

    @classmethod
    def get(cls,addressId:str):
        ref = db.document(f"addresses/{addressId}").get()
        if ref.exists: return cls.from_dict(ref.to_dict())
        
    @classmethod
    def getDefaultAddress(cls,enterpriseId:str, uid:str):
        ref = db.collection(f"addresses").where("uid", "==", uid).where("default", "==", True).get()
        if len(ref)==0: 
            ref = db.collection(f"addresses").where("enterpriseId", "==", enterpriseId).where("default", "==", True).get()
            return cls.from_dict(ref[0].to_dict())
        if len(ref)>0: return cls.from_dict(ref[0].to_dict())
        return None

    def save(self,**kwargs) -> str:
        ref = db.collection("addresses")
        _, ref = ref.add(self.to_dict())
        return ref.id