# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from pelican import signals
import logging

logger = logging.getLogger(__name__)


def patch_subparts(generator):
    generator.subparts = []
    slugs = {}
    for article in generator.articles:
        slugs[article.slug] = article
        if '--' in article.slug:
            generator.subparts.append(article)
    for article in generator.subparts:
        logger.info('sub_part: Detected %s', article.slug)
        (pslug, _) = article.slug.rsplit('--', 1)
        if pslug in slugs:
            parent = slugs[pslug]
            if not hasattr(parent, 'subparts'):
                parent.subparts = []
            parent.subparts.append(article)
            article.subpart_of = parent
            article.subtitle = article.title
            article.title = article.title + ", " + parent.title
            generator.dates.remove(article)
            generator.articles.remove(article)
            if article.category:
                for cat, arts in generator.categories:
                    if cat.name == article.category.name:
                        arts.remove(article)
                        break
                else:
                    logger.error(
                        'sub_part: Cannot remove sub-part from category %s',
                        article.category)
            if (hasattr(article, 'subphotos') or
                    hasattr(article, 'photo_gallery')):
                parent.subphotos = (
                    getattr(parent, 'subphotos',
                            len(getattr(parent, 'photo_gallery', []))) +
                    getattr(article, 'subphotos', 0) +
                    len(getattr(article, 'photo_gallery', [])))
        else:
            logger.error('sub_part: No parent for %s', pslug)
        generator._update_context(('articles', 'dates', 'subparts'))


def write_subparts(generator, writer):
    for article in generator.subparts:
        signals.article_generator_write_article.send(generator,
                                                     content=article)
        writer.write_file(
            article.save_as, generator.get_template(article.template),
            generator.context, article=article, category=article.category,
            override_output=hasattr(article, 'override_save_as'),
            relative_urls=generator.settings['RELATIVE_URLS'])
    if len(generator.subparts) > 0:
        print('sub_part: processed {} sub-parts.'.format(
            len(generator.subparts)))


def register():
    signals.article_generator_finalized.connect(patch_subparts)
    signals.article_writer_finalized.connect(write_subparts)