from os.path import exists as path_exists
from os.path import join as path_join

from click.types import Path

class GitRepo(Path):
    name = 'git repository'

    def convert(self, value, param, ctx):
        path = super().convert(value, param, ctx)
        if not path_exists(path_join(path, '.git')):
            self.fail('No .git directory found in {}'.format(path))

        return path


class WikiRepo(GitRepo):
    name = 'wiki repository'
    invalid_wiki_error = '{} does not appear to be a wiki repository: missing {}'

    def convert(self, value, param, ctx):
        path = super().convert(value, param, ctx)

        for filepath in ('articles', 'header.md', 'footer.md'):
            test_path = path_join('src', filepath)
            if not path_exists(path_join(path, test_path)):
                self.fail(self.invalid_wiki_error.format(
                    path, test_path))

        return path