import logging
from pathlib import Path
from typing import Any

from pydantic import AnyUrl, BaseModel, validator
from pydantic.tools import parse_obj_as

from ..clan_types import validate_path
from ..dirs import clan_data_dir, clan_flakes_dir

DEFAULT_URL = parse_obj_as(AnyUrl, "http://localhost:8000")

log = logging.getLogger(__name__)


class ClanDataPath(BaseModel):
    dest: Path

    @validator("dest")
    def check_data_path(cls: Any, v: Path) -> Path:  # noqa
        return validate_path(clan_data_dir(), v)


class ClanFlakePath(BaseModel):
    dest: Path

    @validator("dest")
    def check_dest(cls: Any, v: Path) -> Path:  # noqa
        return validate_path(clan_flakes_dir(), v)


class FlakeCreateInput(ClanFlakePath):
    url: AnyUrl = DEFAULT_URL
