from app import app, notification_queue
from data import model

import json

def build_event_data(repo, extra_data={}, subpage=None):
  repo_string = '%s/%s' % (repo.namespace_user.username, repo.name)
  homepage = '%s://%s/repository/%s' % (app.config['PREFERRED_URL_SCHEME'], 
                                        app.config['SERVER_HOSTNAME'],
                                        repo_string)

  if subpage:
    if not subpage.startswith('/'):
      subpage = '/' + subpage

    homepage = homepage + subpage

  event_data = {
    'repository': repo_string,
    'namespace': repo.namespace_user.username,
    'name': repo.name,
    'docker_url': '%s/%s' % (app.config['SERVER_HOSTNAME'], repo_string),
    'homepage': homepage,
    'visibility': repo.visibility.name
  }

  event_data.update(extra_data)
  return event_data

def build_notification_data(notification, event_data):
  return {
    'notification_uuid': notification.uuid,
    'repository_namespace': notification.repository.namespace_user.username,
    'repository_name': notification.repository.name,
    'event_data': event_data
  }


def spawn_notification(repo, event_name, extra_data={}, subpage=None, pathargs=[]):
  event_data = build_event_data(repo, extra_data=extra_data, subpage=subpage)

  notifications = model.list_repo_notifications(repo.namespace_user.username, repo.name,
                                                event_name=event_name)
  for notification in notifications:
    notification_data = build_notification_data(notification, event_data)
    path = [repo.namespace_user.username, repo.name, event_name] + pathargs
    notification_queue.put(path, json.dumps(notification_data))