# -*- coding: utf-8 -*-
from caches.settings_cache import get_setting, set_setting
from modules import kodi_utils

translate_path, get_property = kodi_utils.translate_path, kodi_utils.get_property
download_directories_dict = {'movie': 'ultimate_nondebrid.movie_download_directory', 'episode': 'ultimate_nondebrid.tvshow_download_directory', 'thumb_url': 'ultimate_nondebrid.image_download_directory',
							'image_url': 'ultimate_nondebrid.image_download_directory','image': 'ultimate_nondebrid.image_download_directory', 'premium': 'ultimate_nondebrid.premium_download_directory',
							None: 'ultimate_nondebrid.premium_download_directory', 'None': False}
results_window_numbers_dict = {'List': 2000, 'Rows': 2001, 'WideList': 2002}
default_action_dict = {'0': 'play', '1': 'cancel', '2': 'pause'}
paginate_dict = {True: 'ultimate_nondebrid.paginate.limit_widgets', False: 'ultimate_nondebrid.paginate.limit_addon'}
nextep_sort_key_dict = {0: 'last_played', 1: 'first_aired', 2: 'name'}
prescrape_scrapers_tuple = ('easynews', 'filepursuit', 'gdrive', 'plexshare', 'folders')
sort_to_top_dict = {'folders': 'ultimate_nondebrid.results.sort_folders_first'}

def tmdb_api_key():
	return get_setting('ultimate_nondebrid.tmdb_api', '')

def results_format():
	window_format = str(get_setting('ultimate_nondebrid.results.list_format', 'List'))
	if not window_format in results_window_numbers_dict:
		window_format = 'List'
		set_setting('results.list_format', window_format)
	window_number = results_window_numbers_dict[window_format]
	return window_format.lower(), window_number

def store_resolved_to_cloud(debrid_service, pack):
	return False  # No debrid in this addon

def playback_settings():
	return (int(get_setting('ultimate_nondebrid.playback.watched_percent', '90')), int(get_setting('ultimate_nondebrid.playback.resume_percent', '5')))

def limit_resolve():
	return get_setting('ultimate_nondebrid.playback.limit_resolve', 'false') == 'true'

def movies_directory():
	return translate_path(get_setting('ultimate_nondebrid.movies_directory'))

def tv_show_directory():
	return translate_path(get_setting('ultimate_nondebrid.tv_shows_directory'))

def download_directory(media_type):
	return translate_path(get_setting(download_directories_dict[media_type]))

def show_unaired_watchlist():
	return get_setting('ultimate_nondebrid.show_unaired_watchlist', 'true') == 'true'

def source_folders_directory(media_type, source):
	setting = 'ultimate_nondebrid.%s.movies_directory' % source if media_type == 'movie' else 'ultimate_nondebrid.%s.tv_shows_directory' % source
	if get_setting(setting) not in ('', 'None', None): return translate_path(get_setting(setting))
	else: return False

def paginate(is_home):
	paginate_lists = int(get_setting('ultimate_nondebrid.paginate.lists', '0'))
	if is_home: return paginate_lists in (2, 3)
	else: return paginate_lists in (1, 3)

def page_limit(is_home):
	return int(get_setting(paginate_dict[is_home], '20'))

def quality_filter(setting):
	return get_setting('ultimate_nondebrid.%s' % setting).split(', ')

def audio_filters():
	setting = get_setting('ultimate_nondebrid.filter_audio')
	if setting in ('empty_setting', ''): return []
	return setting.split(', ')

def preferred_autoplay():
	setting = get_setting('ultimate_nondebrid.preferred_autoplay')
	if setting in ('empty_setting', ''): return []
	return setting.split(', ')

def include_prerelease_results():
	return int(get_setting('ultimate_nondebrid.filter.include_prerelease', '0')) == 0

def auto_play(media_type):
	return get_setting('ultimate_nondebrid.auto_play_%s' % media_type, 'false') == 'true'

def autoplay_next_episode():
	if auto_play('episode') and get_setting('ultimate_nondebrid.autoplay_next_episode', 'false') == 'true': return True
	else: return False

def autoscrape_next_episode():
	if not auto_play('episode') and get_setting('ultimate_nondebrid.autoscrape_next_episode', 'false') == 'true': return True
	else: return False

def auto_rescrape_with_all():
	return int(get_setting('ultimate_nondebrid.results.auto_rescrape_with_all', '0'))

def auto_episode_group():
	return int(get_setting('ultimate_nondebrid.results.auto_episode_group', '0'))

def auto_nextep_settings(play_type):
	play_type = 'autoplay' if play_type == 'autoplay_nextep' else 'autoscrape'
	window_percentage = 100 - int(get_setting('ultimate_nondebrid.%s_next_window_percentage' % play_type, '95'))
	use_chapters = get_setting('ultimate_nondebrid.%s_use_chapters' % play_type, 'true') == 'true'
	scraper_time = int(get_setting('ultimate_nondebrid.results.timeout', '60')) + 20
	if play_type == 'autoplay':
		alert_method = int(get_setting('ultimate_nondebrid.autoplay_alert_method', '0'))
		default_action = default_action_dict[get_setting('ultimate_nondebrid.autoplay_default_action', '1')]
	else: alert_method, default_action = '', ''
	return {'scraper_time': scraper_time, 'window_percentage': window_percentage, 'alert_method': alert_method, 'default_action': default_action, 'use_chapters': use_chapters}

def filter_status(filter_type):
	return int(get_setting('ultimate_nondebrid.filter.%s' % filter_type, '0'))

def ignore_results_filter():
	return int(get_setting('ultimate_nondebrid.results.ignore_filter', '0'))

def trakt_sync_interval():
	setting = get_setting('ultimate_nondebrid.trakt.sync_interval', '25')
	interval = int(setting) * 60
	return setting, interval

def lists_sort_order(setting):
	return int(get_setting('ultimate_nondebrid.sort.%s' % setting, '0'))

def show_specials():
	return get_setting('ultimate_nondebrid.show_specials', 'false') == 'true'

def single_ep_unwatched_episodes():
	return get_setting('ultimate_nondebrid.single_ep_unwatched_episodes', 'false') == 'true'

def single_ep_display_format(is_external):
	if is_external: setting, default = 'ultimate_nondebrid.single_ep_display_widget', '1'
	else: setting, default = 'ultimate_nondebrid.single_ep_display', ''
	return int(get_setting(setting, default))

def easynews_active():
	if get_setting('ultimate_nondebrid.provider.easynews', 'false') == 'true': easynews_status = easynews_authorized()
	else: easynews_status = False
	return easynews_status

def easynews_authorized():
	easynews_user = get_setting('ultimate_nondebrid.easynews_user', 'empty_setting')
	easynews_password = get_setting('ultimate_nondebrid.easynews_password', 'empty_setting')
	if easynews_user in ('empty_setting', '') or easynews_password in ('empty_setting', ''): easynews_status = False
	else: easynews_status = True
	return easynews_status

def check_prescrape_sources(scraper, media_type):
	if scraper in prescrape_scrapers_tuple: return get_setting('ultimate_nondebrid.check.%s' % scraper) == 'true'
	if get_setting('ultimate_nondebrid.check.%s' % scraper) == 'true' and auto_play(media_type): return True
	else: return False

def filter_by_name(scraper):
	if get_property('fs_filterless_search') == 'true': return False
	return get_setting('ultimate_nondebrid.%s.title_filter' % scraper, 'false') == 'true'

def easynews_language_filter():
	enabled = get_setting('ultimate_nondebrid.easynews.filter_lang') == 'true'
	if enabled: filters = get_setting('ultimate_nondebrid.easynews.lang_filters').split(', ')
	else: filters = []
	return enabled, filters

def results_sort_order():
	sort_direction = -1 if get_setting('ultimate_nondebrid.results.size_sort_direction') == '0' else 1
	return (
			lambda k: (k['quality_rank'], k['provider_rank'], sort_direction*k['size']),
			lambda k: (k['quality_rank'], sort_direction*k['size'], k['provider_rank']),
			lambda k: (k['provider_rank'], k['quality_rank'], sort_direction*k['size']),
			lambda k: (k['provider_rank'], sort_direction*k['size'], k['quality_rank']),
			lambda k: (sort_direction*k['size'], k['quality_rank'], k['provider_rank']),
			lambda k: (sort_direction*k['size'], k['provider_rank'], k['quality_rank'])
			)[int(get_setting('ultimate_nondebrid.results.sort_order', '1'))]

def active_internal_scrapers():
	settings_list = ['provider.easynews', 'provider.filepursuit', 'provider.gdrive', 'provider.plexshare', 'provider.folders']
	active = [i.split('.')[1] for i in settings_list if get_setting('ultimate_nondebrid.%s' % i) == 'true']
	return active

def provider_sort_ranks():
	en_priority = int(get_setting('ultimate_nondebrid.en.priority', '7'))
	fp_priority = int(get_setting('ultimate_nondebrid.fp.priority', '8'))
	gd_priority = int(get_setting('ultimate_nondebrid.gd.priority', '9'))
	ps_priority = int(get_setting('ultimate_nondebrid.ps.priority', '10'))
	return {'easynews': en_priority, 'filepursuit': fp_priority, 'gdrive': gd_priority, 'plexshare': ps_priority, 'folders': 0}

def sort_to_top(provider):
	return get_setting(sort_to_top_dict.get(provider, '')) == 'true'

def auto_resume(media_type):
	auto_resume = get_setting('ultimate_nondebrid.auto_resume_%s' % media_type)
	if auto_resume == '1': return True
	if auto_resume == '2' and auto_play(media_type): return True
	else: return False

def scraping_settings():
	highlight_type = int(get_setting('ultimate_nondebrid.highlight.type', '0'))
	if highlight_type == 2:
		highlight = get_setting('ultimate_nondebrid.scraper_single_highlight', 'FF008EB2')
		return {'highlight_type': 1, '4k': highlight, '1080p': highlight, '720p': highlight, 'sd': highlight}
	easynews_highlight, folders_highlight = '', ''
	highlight_4K, highlight_1080P, highlight_720P, highlight_SD = '', '', '', ''
	if highlight_type == 0:
		easynews_highlight = get_setting('ultimate_nondebrid.provider.easynews_highlight', 'FF00B3B2')
		folders_highlight = get_setting('ultimate_nondebrid.provider.folders_highlight', 'FFB36B00')
	else:
		highlight_4K = get_setting('ultimate_nondebrid.scraper_4k_highlight', 'FFFF00FE')
		highlight_1080P = get_setting('ultimate_nondebrid.scraper_1080p_highlight', 'FFE6B800')
		highlight_720P = get_setting('ultimate_nondebrid.scraper_720p_highlight', 'FF3C9900')
		highlight_SD = get_setting('ultimate_nondebrid.scraper_SD_highlight', 'FF0166FF')
	return {'highlight_type': highlight_type, 'filepursuit': easynews_highlight, 'gdrive': easynews_highlight,
			'plexshare': easynews_highlight, 'easynews': easynews_highlight, 'folders': folders_highlight,
			'4k': highlight_4K, '1080p': highlight_1080P, '720p': highlight_720P, 'sd': highlight_SD}

def omdb_api_key():
	return get_setting('ultimate_nondebrid.omdb_api', 'empty_setting')

def max_threads():
	if not get_setting('ultimate_nondebrid.limit_concurrent_threads', 'false') == 'true': return 60
	return int(get_setting('ultimate_nondebrid.max_threads', '60'))

def mpaa_region():
	return get_setting('ultimate_nondebrid.mpaa_region', 'US')

def date_offset():
	return int(get_setting('ultimate_nondebrid.datetime.offset', '0')) + 5

def watched_indicators():
	if not trakt_user_active(): return 0
	return int(get_setting('ultimate_nondebrid.watched_indicators', '0'))

def trakt_user_active():
	return get_setting('ultimate_nondebrid.trakt.user', 'empty_setting') not in ('empty_setting', '')
