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

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

import telepot_yamb

import os
import subprocess
from startrek_client import Startrek
import yaml
import re

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)

YAMB_TOKEN_FILE = '/etc/direct-tokens/oauth_robot-direct-notify'
STARTREK_TOKEN_FILE = '/etc/direct-tokens/startrek' 

# Direct.Admin.Chat
CHAT_ID = u"0/0/f10c386c-4b05-4333-836c-b2f14473d97f"
# только java-релизы
ST_QUERY = 'Queue: DIRECT Type: Release Status: "Ready to Deploy" Components: !"Releases: Direct" "Sort by": key desc'

APPS_CONF_FILE = "/etc/yandex-direct/direct-apps.conf.yaml"


def run():
    yamb_token = open(YAMB_TOKEN_FILE).readline().rstrip()
    yamb_client = telepot_yamb.Bot(yamb_token)

    startrek_token = open(STARTREK_TOKEN_FILE).readline().rstrip()
    startrek_client = Startrek(token=startrek_token, useragent=u'direct-yamb-bot')

    issues = startrek_client.issues.find(ST_QUERY)

    apps_dict = yaml.load(open(APPS_CONF_FILE))['apps']
    component2app = {apps_dict[app]['tracker-component'] : app for app in apps_dict if 'tracker-component' in apps_dict[app]}

    msg = ''
    
    for ticket in issues:
        for component in ticket.components:
            if component.name in component2app:
                # пока релизы java-b2yt выкладывает buhter@ и напоминалки для админов бесполезны
                # TODO убрать строки до ###, когда их начнёт выкладывать эксплуатация
                if component2app[component.name] == 'java-b2yt':
                    continue
                ###
                migr_tickets = []
                if ticket.description:
                    migr_tickets = re.findall(r'DIRECTMIGR-[0-9]+', ticket.description)
                migr_tickets = filter(lambda x: startrek_client.issues[x].status.key != 'closed', migr_tickets)
                count_migrations = len(migr_tickets)

                msg += u"(%s) https://st.yandex-team.ru/%s%s" % (component2app[component.name], ticket.key, u" (миграции: %d)" % count_migrations if count_migrations > 0 else "")

                try:
                    subprocess.check_output(['dt-deps-manager', '-cr', ticket.key])
                except:
                    msg += u" нельзя выкладывать из-за зависимостей!"

                msg += u"\n"

                break

    if msg != '':
        yamb_client.sendMessage(chat_id=CHAT_ID, text=u"Ждут выкладки java-релизы:\n" + msg)

    return


if __name__ == '__main__':
    run()
