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

## YOU SHOULD MOST LIKELY NOT EDIT THIS FILE!
## Make a conf_private.py for personal configuration.
## Check conf_private.py.EXAMPLE

from caldav.davclient import DAVClient
#from .compability_issues import bedework, xandikos

####################################
# Import personal test server config
####################################

## TODO: there are probably more elegant ways of doing this?

try:
    from .conf_private import only_private ## legacy compatibility
    test_public_test_servers = not only_private
except ImportError:
    try:
        from .conf_private import test_public_test_servers
    except ImportError:
        test_public_test_servers = False

try:
    from .conf_private import caldav_servers
except ImportError:
    caldav_servers = []
try:
    from .conf_private import test_private_test_servers
    if not test_private_test_servers:
        caldav_servers = []
except ImportError:
    pass

try:
    from .conf_private import xandikos_host, xandikos_port
except ImportError:
    xandikos_host = 'localhost'
    xandikos_port = 8993 ## random port above 8000
try:
    from .conf_private import test_xandikos
except ImportError:
    try:
        import xandikos
        test_xandikos = True
    except:
        test_xandikos = False

try:
    from .conf_private import radicale_host, radicale_port
except ImportError:
    radicale_host = 'localhost'
    radicale_port = 5232 ## default radicale host

try:
    from .conf_private import test_radicale
except ImportError:
    try:
        import radicale
        test_radicale = True
    except:
        test_radicale = False

try:
    from .conf_private import rfc6638_users
except ImportError:
    rfc6638_users = []

proxy = "127.0.0.1:8080"
proxy_noport = "127.0.0.1"
        
#####################
# Public test servers
#####################
## As of 2019-09, all of those are down.  Will try to fix Real Soon ... possibly before 2029 even.
if False:
#if test_public_test_servers:
    
    ## TODO: this one is set up on emphemeral storage on OpenShift and
    ## then configured manually through the webui installer, it will
    ## most likely only work for some few days until it's down again.
    ## It's needed to hard-code the configuration into
    ## https://github.com/python-caldav/baikal
    
    caldav_servers.append({
        "url": "http://baikal-caldav-servers.cloudapps.bitbit.net/html/cal.php/",
        "username": "baikaluser",
        "password": "asdf"})

    # bedework:
    # * todos and journals are not properly supported -
    #   ref https://github.com/Bedework/bedework/issues/5
    # * propfind fails to return resourcetype,
    #   ref https://github.com/Bedework/bedework/issues/110
    # * date search on recurrences of recurring events doesn't work
    #   (not reported yet - TODO)
    caldav_servers.append({
        "url": "http://bedework-caldav-servers.cloudapps.bitbit.net/ucaldav/",
        "username": "vbede",
        "password": "bedework",
        "incompatibilities": compatibility_issues.bedework})

    caldav_servers.append({
        "url": "http://xandikos-caldav-servers.cloudapps.bitbit.net/",
        "username": "user1",
        "password": "password1",
        "incompatibilities": compatibility_issues.xandikos})

    # radicale
    caldav_servers.append({
        "url": "http://radicale-caldav-servers.cloudapps.bitbit.net/",
        "username": "testuser",
        "password": "123",
        "nofreebusy": True,
        "nodefaultcalendar": True,
        "noproxy": True})

###################################################################
# Convenience - get a DAVClient object from the caldav_servers list
###################################################################
CONNKEYS = set(('url', 'proxy', 'username', 'password', 'ssl_verify_cert', 'ssl_cert', 'auth'))
def client(idx=None, **kwargs):
    if idx is None and not kwargs:
        return client(0)
    elif idx is not None and not kwargs and caldav_servers:
        return client(**caldav_servers[idx])
    elif not kwargs:
        return None
    for bad_param in ('incompatibilities', 'backwards_compatibility_url', 'principal_url', 'enable'):
        if bad_param in kwargs:
            kwargs.pop(bad_param)
    for kw in kwargs:
        if not kw in CONNKEYS:
            logging.critical("unknown keyword %s in connection parameters.  All compatibility flags should now be sent as a separate list, see conf_private.py.EXAMPLE.  Ignoring." % kw)
            kwargs.pop(kw)
    return DAVClient(**kwargs)

