# -*- coding: utf-8 -*-
"""
Pydantic schemas for TOAR database

"""

from typing import List

from pydantic import BaseModel, Json
import datetime as dt

# ======== Timeseries =========

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
    date_added: dt.datetime
    date_modified: dt.datetime
    station_id: int
    variable_id: int
    additional_metadata: Json


class TimeseriesCreate(TimeseriesBase):
    pass


class Timeseries(TimeseriesBase):
    id: int

    class Config:
        orm_mode = True

# ======== TimeseriesRole =========

class TimeseriesRoleBase(BaseModel):
    id: int = None
    role: int
    status: int
    person_id: int
    timeseries_id: int


class TimeseriesRoleCreate(TimeseriesRoleBase):
    pass


class TimeseriesRole(TimeseriesRoleBase):
    id: int

    class Config:
        orm_mode = True

# ======== TimeseriesAnnotation =========

class TimeseriesAnnotationBase(BaseModel):
    id: int = None
    kind: int
    text: str
    date_added: dt.datetime
    approved: bool
    contributor_id: int
    timeseries_id: int


class TimeseriesAnnotationCreate(TimeseriesAnnotationBase):
    pass


class TimeseriesAnnotation(TimeseriesAnnotationBase):
    id: int

    class Config:
        orm_mode = True

# ======== TimeseriesProgramme =========

class TimeseriesProgrammeBase(BaseModel):
    id: int = None
    name: str
    longname: str
    homepage: str
    description: str


class TimeseriesProgrammeCreate(TimeseriesProgrammeBase):
    pass


class TimeseriesProgramme(TimeseriesProgrammeBase):
    id: int

    class Config:
        orm_mode = True