#!/usr/bin/env python

import os
import glob

def get_zulip_bots_test_fixtures():
    # type: () -> List[str]
    current_dir = os.path.abspath(os.path.dirname(__file__))
    bots_dir = os.path.join(current_dir, '..', 'zulip_bots/zulip_bots/bots')
    glob_pattern = os.path.join(bots_dir, '*/fixtures/*.json')
    fixtures_paths = map(
        lambda fp: os.path.join(*fp.split('/')[-5:]),
        glob.glob(glob_pattern)
    )
    return fixtures_paths

def get_zulip_bots_logos():
    # type: () -> List[str]
    current_dir = os.path.abspath(os.path.dirname(__file__))
    bots_dir = os.path.join(current_dir, '..', 'zulip_bots/zulip_bots/bots')
    glob_pattern = os.path.join(bots_dir, '*/logo.*')
    logo_paths = map(
        lambda fp: os.path.join(*fp.split('/')[-4:]),
        glob.glob(glob_pattern)
    )
    return logo_paths

def get_zulip_bots_docs():
    # type: () -> List[str]
    current_dir = os.path.abspath(os.path.dirname(__file__))
    bots_dir = os.path.join(current_dir, '..', 'zulip_bots/zulip_bots/bots')
    glob_pattern = os.path.join(bots_dir, '*/doc.md')
    doc_paths = map(
        lambda fp: os.path.join(*fp.split('/')[-4:]),
        glob.glob(glob_pattern)
    )
    return doc_paths

def main():
    # type: () -> None
    current_dir = os.path.abspath(os.path.dirname(__file__))
    manifest_path = os.path.join(current_dir, '..', 'zulip_bots/MANIFEST.in')

    with open(manifest_path, 'w') as fp:
        template = 'include {line}\n'
        fixtures = map(lambda line: template.format(line=line),
                       get_zulip_bots_test_fixtures())
        logos = map(lambda line: template.format(line=line),
                    get_zulip_bots_logos())
        docs = map(lambda line: template.format(line=line),
                   get_zulip_bots_docs())

        fp.writelines(fixtures)
        fp.write('\n')

        fp.writelines(logos)
        fp.write('\n')

        fp.writelines(docs)
        fp.write('\n')

if __name__ == '__main__':
    main()