import inspect
from dataclasses import dataclass
from typing import Optional

from configs.firebase import db
from V2.functions.main import DocumentData
from V2.functions.Users.main import User


@dataclass(kw_only=True)
class Location(DocumentData):
    name:str
    apiKey:str
    fromAddressId:str
    timezone:str = "US/Eastern"

    @classmethod
    def get(cls,enterpriseId:str, locationId:str):
        ref = db.document(f"enterprises/{enterpriseId}/locations/{locationId}").get()
        if ref.exists: return cls.from_dict(ref.to_dict())


@dataclass
class PrintifyParams:
    currentUser: User | None
    hostname: str
    id:Optional[str]
    args:dict
    location:Location

    @classmethod
    def from_dict(cls, data):      
        return cls(**{
            k: data.get(k) for k in inspect.signature(cls).parameters
        })