from abc import ABC, abstractmethod
from pathlib import Path
from pydantic import BaseModel

class AbstractDBProvider(ABC):
  @property
  @abstractmethod
  def db_url(self) -> str: ...

  @property
  @abstractmethod
  def db_url_public(self) -> str: ...

class SQLiteProvider(AbstractDBProvider, BaseModel):
  data_dir: Path
  prefix: str = ""

  @property
  def db_path(self):
    return self.data_dir / f"{self.prefix}fuware.db"

  @property
  def db_url(self) -> str:
    return f"sqlite:///{str(self.db_path.absolute())}"

  @property
  def db_url_public(self) -> str:
    return self.db_url