from __future__ import unicode_literals
import frappe

def get_context(context):
	context.no_cache = 1
	context.align_greeting = ''
	setting = frappe.get_doc("Support Settings")

	context.greeting_title = setting.greeting_title
	context.greeting_subtitle = setting.greeting_subtitle
	
	# Support content
	favorite_articles = get_favorite_articles_by_page_view()
	if len(favorite_articles) < 6:
		name_list = []
		if favorite_articles:
			for article in favorite_articles:
				name_list.append(article.name)
		for record in (frappe.get_all("Help Article", 
			fields=["title", "content", "route", "category"], 
			filters={"name": ['not in', tuple(name_list)], "published": 1}, 
			order_by="creation desc", limit=(6-len(favorite_articles)))):
			favorite_articles.append(record)
		
	context.favorite_article_list = get_favorite_articles(favorite_articles)
	context.help_article_list = get_help_article_list()
	
def get_favorite_articles_by_page_view():
	return frappe.db.sql(
			"""
			SELECT
				t1.name as name,
				t1.title as title,
				t1.content as content,
				t1.route as route,
				t1.category as category,
				count(t1.route) as count 
			FROM `tabHelp Article` AS t1 
				INNER JOIN
				`tabWeb Page View` AS t2 
			ON t1.route = t2.path 
			WHERE t1.published = 1
			GROUP BY route 
			ORDER BY count DESC
			LIMIT 6;
			""", as_dict=True)

def get_favorite_articles(favorite_articles):
	favorite_article_list=[]
	for article in favorite_articles:
		description = frappe.utils.strip_html(article.content)
		if len(description) > 120:
			description = description[:120] + '...'
		favorite_article_dict = {
			'title': article.title,
			'description': description,
			'route': article.route,
			'category': article.category,
		}
		favorite_article_list.append(favorite_article_dict)
	return favorite_article_list

def get_help_article_list():
	help_article_list=[]
	category_list = frappe.get_all("Help Category", fields="name")
	for category in category_list:
		help_articles = frappe.get_all("Help Article", fields="*", filters={"category": category.name, "published": 1}, order_by="modified desc", limit=5)
		if help_articles:
			help_aricles_per_caetgory = {
				'category': category,
				'articles': help_articles,
			}
			help_article_list.append(help_aricles_per_caetgory)
	return help_article_list