from .models_core import Timeseries
from .models_role import TimeseriesRole, timeseries_timeseries_roles_table
from .models_annotation import TimeseriesAnnotation, timeseries_timeseries_annotations_table
from .models_programme import TimeseriesProgramme
from .models_changelog import TimeseriesChangelog
from toardb.base import Base

from sqlalchemy import Table, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

# controlled vocabulary

# Data Access Rights
DA_enum_table = Table("da_vocabulary",
                Base.metadata,
                Column("enum_val", Integer, primary_key=True),
                Column("enum_str", String),
                Column("enum_display_str", String)
          )
# The following code is just a workaround (see stationmeta/models.py):
from collections import namedtuple
Enumdict=namedtuple("Dict",["value","string","display_str"])
DA_enum = (
    Enumdict(0, 'ByAttribution', 'by attribution'),
    Enumdict(1, 'ShareAlike', 'share alike'),
    Enumdict(2, 'Restricted', 'restricted')
    )
 
# Sampling Frequencies
SF_enum_table = Table("sf_vocabulary",
                Base.metadata,
                Column("enum_val", Integer, primary_key=True),
                Column("enum_str", String),
                Column("enum_display_str", String)
          )
# The following code is just a workaround (see stationmeta/models.py):
SF_enum = (
    Enumdict(0, 'Hourly', 'hourly'),
    Enumdict(1, 'ThreeHourly', '3-hourly'),
    Enumdict(2, 'SixHourly', '6-hourly'),
    Enumdict(3, 'Daily', 'daily'),
    Enumdict(4, 'Weekly', 'weekly'),
    Enumdict(5, 'Monthly', 'monthly'),
    Enumdict(6, 'Yearly', 'yearly'),
    Enumdict(7, 'Irregular', 'irregular data samples of constant length'),
    Enumdict(8, 'Irregular2', 'irregular data samples of varying length')
    )


# Aggregation Types
AT_enum_table = Table("at_vocabulary",
                Base.metadata,
                Column("enum_val", Integer, primary_key=True),
                Column("enum_str", String),
                Column("enum_display_str", String)
          )
# The following code is just a workaround (see stationmeta/models.py):
AT_enum = (
    Enumdict(0, 'Mean', 'mean'),
    Enumdict(1, 'Mean1Of2', 'mean of two values'),
    Enumdict(2, 'Mean1OfWeek', 'weekly mean'),
    Enumdict(3, 'Mean4Samples', 'mean out of 4 samples'),
    Enumdict(4, 'MeanMonth', 'monthly mean'),
    Enumdict(5, 'None', 'none'),
    Enumdict(6, 'Unknown', 'unknown')
    )

# Data Sources
DS_enum_table = Table("ds_vocabulary",
                Base.metadata,
                Column("enum_val", Integer, primary_key=True),
                Column("enum_str", String),
                Column("enum_display_str", String)
          )
# The following code is just a workaround (see stationmeta/models.py):
DS_enum = (
    Enumdict(0, 'Model', 'model'),
    Enumdict(1, 'Measurement', 'measurement')
    )

# Measurement Methods
MM_enum_table = Table("mm_vocabulary",
                Base.metadata,
                Column("enum_val", Integer, primary_key=True),
                Column("enum_str", String),
                Column("enum_display_str", String)
          )
# The following code is just a workaround (see stationmeta/models.py):
MM_enum = (
    Enumdict(0, 'UVAbsorption', 'UV absorption'),
    Enumdict(1, 'UnknownInstrument', 'unknown instrument')
    )