""" ================================= |
| This file is part of                |
|   staticoso                         |
| Just a simple Static Site Generator |
|                                     |
| Licensed under the AGPLv3 license   |
|   Copyright (C) 2022, OctoSpacc     |
| ================================= """

import configparser
from ast import literal_eval

DefConf = {
	"Logging": 20,
	"Threads": 0,
	"DiffBuild": False,
	"OutDir": "public",
	"SiteLang": "en",
	"SiteTemplate": "Default.html",
	"ActivityPubTypeFilter": "Post",
	"ActivityPubHoursLimit": 168,
	"CategoriesUncategorized": "Uncategorized",
	"FeedCategoryFilter": "Blog",
	"FeedEntries": 10,
	"JournalRedirect": False
}

def LoadConfFile(File):
	Conf = configparser.ConfigParser()
	Conf.optionxform = str
	Conf.read(File)
	return Conf

def LoadConfStr(Str):
	Conf = configparser.ConfigParser()
	Conf.optionxform = str
	Conf.read_string(Str)
	return Conf

def ReadConf(Conf, Sect, Opt=None):
	if Opt:
		if Conf.has_option(Sect, Opt):
			return Conf[Sect][Opt]
	else:
		if Conf.has_section(Sect):
			return Conf[Sect]
	return None

def EvalOpt(Opt):
	if Opt:
		return literal_eval(Opt)
	else:
		return None

# TODO: Cleaning

def OptionChoose(Default, Primary, Secondary, Tertiary=None):
	return Primary if Primary != None else Secondary if Secondary != None else Tertiary if Tertiary != None else Default
def OptChoose(Default, Primary, Secondary, Tertiary=None):
	return OptionChoose(Default, Primary, Secondary, Tertiary=None)

def DefConfOptChoose(Key, Primary, Secondary):
	return OptChoose(DefConf[Key], Primary, Secondary)

def StringBoolChoose(Default, Primary, Secondary):
	Var = Default
	Check = Primary if Primary != None else Secondary
	if type(Check) == bool:
		Var = Check
	elif type(Check) == str:
		if Check in ('True', 'All', '*'):
			Var = True
		elif Check in ('False', 'None'):
			Var = False
	return Var
def StrBoolChoose(Default, Primary, Secondary):
	return StringBoolChoose(Default, Primary, Secondary)
