import requests
import json

from timeio.feta import Thing
from timeio.common import get_envvar
from timeio.journaling import Journal
from timeio.mqtt import publish_single

api_base_url = get_envvar("DB_API_BASE_URL")


def write_observations(thing: Thing, parsed_observations: dict):
    journal = Journal(f"SYNC_{thing.ext_api.api_type_name}")
    resp = requests.post(
        f"{api_base_url}/observations/upsert/{thing.uuid}",
        json=parsed_observations,
        headers={"Content-Type": "application/json"},
    )
    if resp.status_code != 200:
        journal.error(f"Failed to insert data into timeIO DB: {resp.text}", thing.uuid)
        resp.raise_for_status()
        # exit

    journal.info(
        f"Successfully inserted {len(parsed_observations['observations'])} "
        f"observations for thing {thing.uuid} into timeIO DB",
        thing.uuid,
    )
    publish_single("data_parsed", json.dumps({"thing_uuid": thing.uuid}))