#adapted from: https://pydantic-docs.helpmanual.io/
from typing import List
from pydantic import BaseModel, Schema, BaseConfig, Json
from geoalchemy2 import WKTElement
from geoalchemy2.shape import to_shape
import datetime as dt
from pydantic import ValidationError


"""
now: Pydantic schemas for TOAR database
"""

class TimeseriesBase(BaseModel):
    id: int = None
    label: str
    order: int
    access_rights: int
    sampling_frequency: int
    aggregation: int
    data_start_date: dt.datetime
    data_end_date: dt.datetime
    measurement_method: str
    sampling_height: float
# how to define jsonstring? dict?
#   additional_metadata = Column(JSONB(astext_type=Text()), nullable=False)
    date_added: dt.datetime
    date_modified: dt.datetime
    station_id: int
    variable_id: int
    additional_metadata: Json
#how to define ForeignKeys? Here????
#   station_id = Column(ForeignKey('stationmeta_core.id', deferrable=True, initially='DEFERRED'), index=True)
#   variable_id = Column(ForeignKey('variables.id', deferrable=True, initially='DEFERRED'), index=True)


class TimeseriesCreate(TimeseriesBase):
    pass


class Timeseries(TimeseriesBase):
    id: int

    class Config:
        orm_mode = True


external_data_toar = {
    "label": "CMA2",
    "order": 1,
    "access_rights": 0,
    "sampling_frequency": 0,
    "aggregation": 0,
    "data_start_date": "2003-09-07T15:30:00+02:00",
    "data_end_date": "2016-12-31T14:30:00+01:00",
    "measurement_method": "UV absorption",
    "sampling_height": 7.0,
    "date_added": "2020-05-15T15:30:00+02:00",
    "date_modified": "2020-05-16T09:30:00+02:00",
    "station_id": 2,
    "variable_id": 7,
# although this is, what should go into the database,
# only the other line is working with pydantic Json!
#   "additional_metadata": {}}
    "additional_metadata": "{}"}

try:
    timeseries = TimeseriesBase(**external_data_toar)
    print(timeseries.dict())
except ValidationError as e:
    print(e.json())