"""Config flow for ecowitt."""
from __future__ import annotations

import secrets
from typing import Any

from yarl import URL

from homeassistant import config_entries
from homeassistant.components import webhook
from homeassistant.const import CONF_WEBHOOK_ID
from homeassistant.data_entry_flow import FlowResult
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.network import get_url

from .const import DOMAIN


class EcowittConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
    """Config flow for the Ecowitt."""

    VERSION = 1
    _webhook_id: str

    async def async_step_user(
        self, user_input: dict[str, Any] | None = None
    ) -> FlowResult:
        """Handle the initial step."""
        if user_input is None:
            self._webhook_id = secrets.token_hex(16)
            return self.async_show_form(
                step_id="user",
            )

        base_url = URL(get_url(self.hass))
        assert base_url.host

        return self.async_create_entry(
            title="Ecowitt",
            data={
                CONF_WEBHOOK_ID: self._webhook_id,
            },
            description_placeholders={
                "path": webhook.async_generate_path(self._webhook_id),
                "server": base_url.host,
                "port": str(base_url.port),
            },
        )


class InvalidPort(HomeAssistantError):
    """Error to indicate there port is not usable."""