from mongoengine import StringField, DateTimeField, ListField

from database import Database, strict
from database.fields import StrippedStringField
from database.model import AttributedDocument
from database.model.base import GetMixin


class Project(AttributedDocument):

    get_all_query_options = GetMixin.QueryParameterOptions(
        pattern_fields=("name", "description"),
        list_fields=("tags", "system_tags", "id"),
    )

    meta = {
        "db_alias": Database.backend,
        "strict": strict,
        "indexes": [
            {
                "name": "%s.project.main_text_index" % Database.backend,
                "fields": ["$name", "$id", "$description"],
                "default_language": "english",
                "weights": {"name": 10, "id": 10, "description": 10},
            }
        ],
    }

    id = StringField(primary_key=True)
    name = StrippedStringField(
        required=True,
        unique_with=AttributedDocument.company.name,
        min_length=3,
        sparse=True,
    )
    description = StringField(required=True)
    created = DateTimeField(required=True)
    tags = ListField(StringField(required=True))
    system_tags = ListField(StringField(required=True))
    default_output_destination = StrippedStringField()
    last_update = DateTimeField()