
# Slixmpp: The Slick XMPP Library
# Copyright (C) 2013 Nathanael C. Fritz, Lance J.T. Stout
# This file is part of slixmpp.
# See the file LICENSE for copying permission.
from slixmpp.xmlstream import ET, ElementBase


class UserSettings(ElementBase):
    name = 'usersetting'
    namespace = 'google:setting'
    plugin_attrib = 'google_settings'
    interfaces = set(['auto_accept_suggestions',
                      'mail_notifications',
                      'archiving_enabled',
                      'gmail',
                      'email_verified',
                      'domain_privacy_notice',
                      'display_name'])

    def _get_setting(self, setting):
        xml = self.xml.find('{%s}%s' % (self.namespace, setting))
        if xml is not None:
            return xml.attrib.get('value', '') == 'true'
        return False

    def _set_setting(self, setting, value):
        self._del_setting(setting)
        if value in (True, False):
            xml = ET.Element('{%s}%s' % (self.namespace, setting))
            xml.attrib['value'] = 'true' if value else 'false'
            self.xml.append(xml)

    def _del_setting(self, setting):
        xml = self.xml.find('{%s}%s' % (self.namespace, setting))
        if xml is not None:
            self.xml.remove(xml)

    def get_display_name(self):
        xml = self.xml.find('{%s}%s' % (self.namespace, 'displayname'))
        if xml is not None:
            return xml.attrib.get('value', '')
        return ''

    def set_display_name(self, value):
        self._del_setting(setting)
        if value:
            xml = ET.Element('{%s}%s' % (self.namespace, 'displayname'))
            xml.attrib['value'] = value
            self.xml.append(xml)

    def del_display_name(self):
        self._del_setting('displayname')

    def get_auto_accept_suggestions(self):
        return self._get_setting('autoacceptsuggestions')

    def get_mail_notifications(self):
        return self._get_setting('mailnotifications')

    def get_archiving_enabled(self):
        return self._get_setting('archivingenabled')

    def get_gmail(self):
        return self._get_setting('gmail')

    def get_email_verified(self):
        return self._get_setting('emailverified')

    def get_domain_privacy_notice(self):
        return self._get_setting('domainprivacynotice')

    def set_auto_accept_suggestions(self, value):
        self._set_setting('autoacceptsuggestions', value)

    def set_mail_notifications(self, value):
        self._set_setting('mailnotifications', value)

    def set_archiving_enabled(self, value):
        self._set_setting('archivingenabled', value)

    def set_gmail(self, value):
        self._set_setting('gmail', value)

    def set_email_verified(self, value):
        self._set_setting('emailverified', value)

    def set_domain_privacy_notice(self, value):
        self._set_setting('domainprivacynotice', value)

    def del_auto_accept_suggestions(self):
        self._del_setting('autoacceptsuggestions')

    def del_mail_notifications(self):
        self._del_setting('mailnotifications')

    def del_archiving_enabled(self):
        self._del_setting('archivingenabled')

    def del_gmail(self):
        self._del_setting('gmail')

    def del_email_verified(self):
        self._del_setting('emailverified')

    def del_domain_privacy_notice(self):
        self._del_setting('domainprivacynotice')
