#!/usr/bin/python
# -*- encoding: utf-8 -*-

import sys
import os

sys.path.insert(0, '/opt/direct-py/startrek-python-client-sni-fix')
from startrek_client import Startrek

import yaml
import re
import subprocess
import requests

from project_specific import ProjectSpecificSettings

pathlist = ["/usr/local/sbin", "/usr/local/bin", "/usr/sbin", "/usr/bin", "/sbin", "/bin", "/usr/games", "/usr/local/games"]
os.environ["PATH"] = os.pathsep.join(pathlist)

STARTREK_TOKEN_FILE = u'/etc/direct-tokens/startrek'
APPS_CONF_FILE = u"/etc/yandex-direct/direct-apps.conf.yaml"
DIRECT_TRUNK = ProjectSpecificSettings().svn_trunk_url()
SCRIPT_TAG = u'review_created'
ST_QUERY = u'Queue: DIRECT Type: Release Components: "Releases: Direct" Status: "Ready for Test", Testing Tags: !"%s" "Sort by": key desc' % SCRIPT_TAG
TABULA_URL = u'https://direct-dev.yandex-team.ru/metatracker/issuesToReview?release_jira_id=%s'

HOSTNAME = subprocess.check_output(['hostname', '-f']).strip()
SCRIPT_NAME = os.path.basename(__file__)
SIGN = u"----\nСкрипт %s с машины %s" % (SCRIPT_NAME, HOSTNAME)


def create_review():
    global startrek_client

    releases = startrek_client.issues.find(ST_QUERY)

    for release in releases:
        to_review = requests.get(url=TABULA_URL % release.key, verify=False).json()

        if to_review:
            review_ticket = startrek_client.issues.create(
                queue='DIRECT',
                summary=u'Ревью непродуктовых коммитов в релизе %s' % release.key,
                type={'name': 'Task'},
                description=u"\n".join([u"st:%s" % issue for issue in to_review] + [u"\n%s" % SIGN]),
            )
            comment = u'создан тикет на ревью: %s' % review_ticket.key
        else:
            comment = u'непродуктовых коммитов в релизе нет, тикет на ревью создан не будет'
        startrek_client.issues[release.key].update(tags=startrek_client.issues[release.key].tags + [SCRIPT_TAG])

        startrek_client.issues[release.key].comments.create(text=comment + '\n' + SIGN)


def run():
    global startrek_client

    startrek_token = open(STARTREK_TOKEN_FILE).readline().strip()
    startrek_client = Startrek(token=startrek_token, useragent=SCRIPT_NAME)

    create_review()

    return


if __name__ == '__main__':
    run()

