from flask import g
from sqlalchemy import Column, Integer, Table, String
from geoalchemy2 import Geometry
from .._mapper import schema
from sqlalchemy import UniqueConstraint

class CustomGroup:
    def __init__(self, name):
        self.name = name

    @property
    def validates(self):
        if not self.name:
            return "Name must exist"

        return True

    @property
    def base_output(self):
        return {
            "id": self.id,
            "name": self.name
        }

    @property
    def output(self):
        output = self.base_output
        output["custom_points"] = len(self.custom_points)
        output["custom_polygons"] = len(self.custom_polygons)
        return output

    @property
    def output_with_custom_points(self):
        output = self.base_output
        output['custom_points'] = [cp.output(include_timeline_data=True) for cp in self.custom_points]
        output['custom_polygons'] = [cp.to_dict_minimal for cp in self.custom_polygons]
        return output

custom_groups_table = Table(
    "custom_groups",
    schema.metadata,
    Column("id", Integer, primary_key=True, autoincrement=True),
    Column("name", String, nullable=False, unique=True)
)

schema.map_imperatively(CustomGroup, custom_groups_table)
