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

import sys
import os
import yaml

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

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)

SCRIPT_NAME = os.path.basename(__file__)

STARTREK_TOKEN_FILE = '/etc/direct-tokens/startrek'
with open(STARTREK_TOKEN_FILE) as st_fd:
    startrek_token = st_fd.readline().strip()
startrek_client = Startrek(token=startrek_token, useragent=SCRIPT_NAME)

APPS_CONF_FILE = "/etc/yandex-direct/direct-apps.conf.yaml"
with open(APPS_CONF_FILE) as apps_fd:
    apps_dict = yaml.load(apps_fd)['apps']

DEPLOYED_TAGS = set(apps_dict[app]['tracker-deployed-tag'] for app in apps_dict if 'tracker-deployed-tag' in apps_dict[app])

TAG = u'autoprocessing_pending'
ST_QUERY = u'Queue: DIRECT Tags: %s "Sort by": key desc' % TAG


def run():
    tickets = startrek_client.issues.find(ST_QUERY)

    for ticket in tickets:
        ticket_tags = set(startrek_client.issues[ticket.key].tags)
        tags_to_delete = set(ticket_tags) & DEPLOYED_TAGS

        if not tags_to_delete:
            continue

        changelog = startrek_client.issues[ticket.key].changelog.get_all(field=('tags'))

        for change in changelog:
            for field in change.fields:
                if field['field'].id == 'tags':
                    tags_from = set(field['from'] if field['from'] else [])

                    if not field['to']:
                        continue
                    for tag in field['to']:
                        if tag not in tags_from and tag in tags_to_delete:
                            tags_to_delete.remove(tag)

        if tags_to_delete:
            startrek_client.issues[ticket.key].update(tags=list(ticket_tags - tags_to_delete))

    startrek_client.bulkchange.update(
        [ticket.key for ticket in tickets],
        tags={'remove': [TAG]}
    ).wait()

    return


if __name__ == '__main__':
    run()

