#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Copyright: (c) 2018, F5 Networks Inc.
# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)

from __future__ import absolute_import, division, print_function
__metaclass__ = type

DOCUMENTATION = r'''
---
module: bigip_device_syslog
short_description: Manage system-level syslog settings on BIG-IP
description:
  - Manage system-level syslog settings on BIG-IP.
version_added: "1.0.0"
options:
  auth_priv_from:
    description:
      - Specifies the lowest level of messages about user authentication
        to include in the system log.
    type: str
    choices:
      - alert
      - crit
      - debug
      - emerg
      - err
      - info
      - notice
      - warning
  auth_priv_to:
    description:
      - Specifies the highest level of messages about user authentication
        to include in the system log.
    type: str
    choices:
      - alert
      - crit
      - debug
      - emerg
      - err
      - info
      - notice
      - warning
  console_log:
    description:
      - Enables or disables logging emergency syslog messages to the
        console.
    type: bool
  cron_from:
    description:
      - Specifies the lowest level of messages about time-based scheduling
        to include in the system log.
    type: str
    choices:
      - alert
      - crit
      - debug
      - emerg
      - err
      - info
      - notice
      - warning
  cron_to:
    description:
      - Specifies the highest level of messages about time-based
        scheduling to include in the system log.
    type: str
    choices:
      - alert
      - crit
      - debug
      - emerg
      - err
      - info
      - notice
      - warning
  daemon_from:
    description:
      - Specifies the lowest level of messages about daemon performance to
        include in the system log.
    type: str
    choices:
      - alert
      - crit
      - debug
      - emerg
      - err
      - info
      - notice
      - warning
  daemon_to:
    description:
      - Specifies the highest level of messages about daemon performance
        to include in the system log.
    type: str
    choices:
      - alert
      - crit
      - debug
      - emerg
      - err
      - info
      - notice
      - warning
  include:
    description:
      - Syslog-NG configuration to include in the device syslog config.
    type: str
  iso_date:
    description:
      - Enables or disables the ISO date format for messages in the log
        files.
    type: bool
  kern_from:
    description:
      - Specifies the lowest level of kernel messages to include in the
        system log.
    type: str
    choices:
      - alert
      - crit
      - debug
      - emerg
      - err
      - info
      - notice
      - warning
  kern_to:
    description:
      - Specifies the highest level of kernel messages to include in the
        system log.
    type: str
    choices:
      - alert
      - crit
      - debug
      - emerg
      - err
      - info
      - notice
      - warning
  local6_from:
    description:
      - Specifies the lowest error level for messages from the local6
        facility to include in the log.
    type: str
    choices:
      - alert
      - crit
      - debug
      - emerg
      - err
      - info
      - notice
      - warning
  local6_to:
    description:
      - Specifies the highest error level for messages from the local6
        facility to include in the log.
    type: str
    choices:
      - alert
      - crit
      - debug
      - emerg
      - err
      - info
      - notice
      - warning
  mail_from:
    description:
      - Specifies the lowest level of mail log messages to include in the
        system log.
    type: str
    choices:
      - alert
      - crit
      - debug
      - emerg
      - err
      - info
      - notice
      - warning
  mail_to:
    description:
      - Specifies the highest level of mail log messages to include in the
        system log.
    type: str
    choices:
      - alert
      - crit
      - debug
      - emerg
      - err
      - info
      - notice
      - warning
  messages_from:
    description:
      - Specifies the lowest level of system messages to include in the
        system log.
    type: str
    choices:
      - alert
      - crit
      - debug
      - emerg
      - err
      - info
      - notice
      - warning
  messages_to:
    description:
      - Specifies the highest level of system messages to include in the
        system log.
    type: str
    choices:
      - alert
      - crit
      - debug
      - emerg
      - err
      - info
      - notice
      - warning
  user_log_from:
    description:
      - Specifies the lowest level of user account messages to include in
        the system log.
    type: str
    choices:
      - alert
      - crit
      - debug
      - emerg
      - err
      - info
      - notice
      - warning
  user_log_to:
    description:
      - Specifies the highest level of user account messages to include in
        the system log.
    type: str
    choices:
      - alert
      - crit
      - debug
      - emerg
      - err
      - info
      - notice
      - warning
extends_documentation_fragment: f5networks.f5_modules.f5
author:
  - Tim Rupp (@caphrim007)
'''

EXAMPLES = r'''
- name: Create a syslog config
  bigip_device_syslog:
    name: foo
    provider:
      password: secret
      server: lb.mydomain.com
      user: admin
  delegate_to: localhost
'''

RETURN = r'''
auth_priv_from:
  description: The new lowest user authentication logging level.
  returned: changed
  type: str
  sample: alert
auth_priv_to:
  description: The new highest user authentication logging level.
  returned: changed
  type: str
  sample: emerg
console_log:
  description: Whether logging to the console is enabled or not.
  returned: changed
  type: bool
  sample: yes
iso_date:
  description: Whether ISO date format in logs is enabled or not.
  returned: changed
  type: bool
  sample: no
cron_from:
  description: The new lowest time-based scheduling logging level.
  returned: changed
  type: str
  sample: emerg
cron_to:
  description: The new highest time-based scheduling logging level.
  returned: changed
  type: str
  sample: alert
daemon_from:
  description: The new lowest daemon performance logging level.
  returned: changed
  type: str
  sample: alert
daemon_to:
  description: The new highest daemon performan
ce logging level.
  returned: changed
  type: str
  sample: alert
include:
  description: The new extra syslog-ng configuration to include in syslog config.
  returned: changed
  type: str
  sample: "filter f_remote_syslog { not (facility(local6)) };"
kern_from:
  description: The new lowest kernel messages logging level.
  returned: changed
  type: str
  sam
ple: alert
kern_to:
  description: The new highest kernel messages logging level.
  returned: changed
  type: str
  sample: alert
local6_from:
  description: The new lowest local6 facility logging level.
  returned: changed
  type: str
  sample: alert
local6_to:
  description: The new highest local6 facility logging level.
  returned: changed
  type: str
  sample: alert
mail_from:
  description: The new lowest mail log logging level.
  returned: changed
  type: str
  sample: alert
mail_to:
  description: The new highest mail log logging level.
  returned: changed
  type: str
  sample: alert
messages_from:
  description: The new lowest system logging level.
  returned: changed
  type: str
  sample: alert
messages_to:
  description: The new highest system logging level.
  returned: changed
  type: str
  sample: alert
user_log_from:
  description: The new lowest user account logging level.
  returned: changed
  type: str
  sample: alert
user_log_to:
  description: The new highest user account logging level.
  returned: changed
  type: str
  sample: alert
'''
import re
from datetime import datetime
from ansible.module_utils.basic import AnsibleModule

from ..module_utils.bigip import F5RestClient
from ..module_utils.common import (
    F5ModuleError, AnsibleF5Parameters, flatten_boolean, f5_argument_spec
)
from ..module_utils.compare import cm