from .base import (
    CERBERUS_RULE_OPTIONAL_NOTEMPTY_STRING,
    CERBERUS_RULE_OPTIONAL_STRING,
    CERBERUS_RULE_REQUIRED_NONEMPTY_STRING,
    ImageSchema
)
from .feed import FeedSchema


class SeriesSchema(FeedSchema):
    def __init__(self):
        super(SeriesSchema, self).__init__()
        self['series_id'] = CERBERUS_RULE_REQUIRED_NONEMPTY_STRING
        self['type'] = CERBERUS_RULE_OPTIONAL_NOTEMPTY_STRING
        self['episodes'] = {
            'type': 'list',
            'nullable': True,
            'default': None,
            'schema': {
                'type': 'dict',
                'schema': {
                    'id': {'type': 'integer', 'nullable': False, 'coerce': int},
                    'type': CERBERUS_RULE_OPTIONAL_NOTEMPTY_STRING,
                    'production_kind': CERBERUS_RULE_OPTIONAL_STRING,
                    'title': CERBERUS_RULE_REQUIRED_NONEMPTY_STRING,
                    'language': CERBERUS_RULE_REQUIRED_NONEMPTY_STRING,
                    'genre': CERBERUS_RULE_OPTIONAL_NOTEMPTY_STRING,
                    'sub_genre': CERBERUS_RULE_OPTIONAL_NOTEMPTY_STRING,
                    'audience_description': CERBERUS_RULE_OPTIONAL_NOTEMPTY_STRING,
                    'synopsis': CERBERUS_RULE_OPTIONAL_STRING,
                    'number': {'type': 'integer', 'nullable': False, 'coerce': int},
                    'season_number': {'type': 'string', 'nullable': False, 'coerce': str},
                    'production_year': {'type': 'integer', 'nullable': True, 'coerce': int},
                    'pg_rating': CERBERUS_RULE_OPTIONAL_STRING,
                    'vchip_rating': CERBERUS_RULE_OPTIONAL_STRING,
                    'global_id': CERBERUS_RULE_OPTIONAL_STRING,
                    'media': {
                        'type': 'list',
                        'nullable': True,
                        'default': None,
                        'schema': {
                            'type': 'dict',
                            'schema': {
                                'title': CERBERUS_RULE_REQUIRED_NONEMPTY_STRING,
                                'house_number': CERBERUS_RULE_OPTIONAL_STRING,
                                'box_number': CERBERUS_RULE_OPTIONAL_STRING,
                                'segment': {'type': 'integer', 'nullable': True, 'coerce': int},
                                'tcin': CERBERUS_RULE_REQUIRED_NONEMPTY_STRING,
                                'tcout': CERBERUS_RULE_REQUIRED_NONEMPTY_STRING,
                                'duration': CERBERUS_RULE_OPTIONAL_STRING,
                            }
                        }
                    },
                }
            }
        }
        self['image'] = {
            'type': 'dict',
            'schema': ImageSchema(),
            'required': False
        }
