#!/usr/bin/python
# -*- coding: utf-8 -*-

# Copyright (c) 2021, Cisco Systems
# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt)

DOCUMENTATION = r"""
---
module: sda_fabric_devices
short_description: Resource module for Sda Fabricdevices
description:
- Manage operations create, update and delete of the resource Sda Fabricdevices.
- Adds fabric devices based on user input.
- Deletes a fabric device based on id.
- Deletes fabric devices based on user input.
- Updates fabric devices based on user input.
version_added: '6.14.0'
extends_documentation_fragment:
  - cisco.dnac.module
author: Rafael Campos (@racampos)
options:
  deviceRoles:
    description: DeviceRoles query parameter. Device roles of the fabric device.
    type: str
  fabricId:
    description: FabricId query parameter. ID of the fabric this device belongs to.
    type: str
  id:
    description: Id path parameter. ID of the fabric device.
    type: str
  networkDeviceId:
    description: NetworkDeviceId query parameter. Network device ID of the fabric device.
    type: str
  payload:
    description: Sda Fabric Devices's payload.
    elements: dict
    suboptions:
      borderDeviceSettings:
        description: Sda Fabric Devices's borderDeviceSettings.
        suboptions:
          borderTypes:
            description: List of the border types of the fabric device. Allowed values
              are LAYER_2, LAYER_3.
            elements: str
            type: list
          layer3Settings:
            description: Sda Fabric Devices's layer3Settings.
            suboptions:
              borderPriority:
                description: Border priority of the fabric border device. Allowed range
                  is 1-9. A lower value indicates higher priority. E.g., a priority
                  of 1 takes precedence over 5. Default priority would be set to 10.
                type: int
              importExternalRoutes:
                description: Set this to import external routes from other routing protocols
                  (such as BGP) to the fabric control plane. (updating this field is
                  not allowed).
                type: bool
              isDefaultExit:
                description: Set this to make the fabric border device the gateway of
                  last resort for this site. Any unknown traffic will be sent to this
                  fabric border device from edge nodes. (updating this field is not
                  allowed).
                type: bool
              localAutonomousSystemNumber:
                description: BGP Local autonomous system number of the fabric border
                  device. Allowed range is 1 to 4294967295. (updating this field is
                  not allowed).
                type: str
              prependAutonomousSystemCount:
                description: Prepend autonomous system count of the fabric border device.
                  Allowed range is 1 to 10.
                type: int
            type: dict
        type: dict
      deviceRoles:
        description: List of the roles of the fabric device. Allowed values are CONTROL_PLANE_NODE,
          EDGE_NODE, BORDER_NODE. (updating this field is not allowed).
        elements: str
        type: list
      fabricId:
        description: ID of the fabric site/zone of this fabric device. (updating this
          field is not allowed).
        type: str
      id:
        description: ID of the fabric device. (updating this field is not allowed).
        type: str
      networkDeviceId:
        description: Network device ID of the fabric device. (updating this field is
          not allowed).
        type: str
    type: list
requirements:
- dnacentersdk >= 2.7.1
- python >= 3.5
seealso:
- name: Cisco DNA Center documentation for SDA AddFabricDevices
  description: Complete reference of the AddFabricDevices API.
  link: https://developer.cisco.com/docs/dna-center/#!add-fabric-devices
- name: Cisco DNA Center documentation for SDA DeleteAFabricDeviceById
  description: Complete reference of the DeleteAFabricDeviceById API.
  link: https://developer.cisco.com/docs/dna-center/#!delete-a-fabric-device-by-id
- name: Cisco DNA Center documentation for SDA DeleteFabricDevices
  description: Complete reference of the DeleteFabricDevices API.
  link: https://developer.cisco.com/docs/dna-center/#!delete-fabric-devices
- name: Cisco DNA Center documentation for SDA UpdateFabricDevices
  description: Complete reference of the UpdateFabricDevices API.
  link: https://developer.cisco.com/docs/dna-center/#!update-fabric-devices
notes:
  - SDK Method used are
    sda.Sda.add_fabric_devices,
    sda.Sda.delete_a_fabric_device_by_id,
    sda.Sda.update_fabric_devices,

  - Paths used are
    post /dna/intent/api/v1/sda/fabricDevices,
    delete /dna/intent/api/v1/sda/fabricDevices,
    delete /dna/intent/api/v1/sda/fabricDevices/{id},
    put /dna/intent/api/v1/sda/fabricDevices,

"""

EXAMPLES = r"""
- name: Update all
  cisco.dnac.sda_fabric_devices:
    dnac_host: "{{dnac_host}}"
    dnac_username: "{{dnac_username}}"
    dnac_password: "{{dnac_password}}"
    dnac_verify: "{{dnac_verify}}"
    dnac_port: "{{dnac_port}}"
    dnac_version: "{{dnac_version}}"
    dnac_debug: "{{dnac_debug}}"
    state: present
    payload:
    - borderDeviceSettings:
        borderTypes:
        - string
        layer3Settings:
          borderPriority: 0
          importExternalRoutes: true
          isDefaultExit: true
          localAutonomousSystemNumber: string
          prependAutonomousSystemCount: 0
      deviceRoles:
      - string
      fabricId: string
      id: string
      networkDeviceId: string

- name: Delete all
  cisco.dnac.sda_fabric_devices:
    dnac_host: "{{dnac_host}}"
    dnac_username: "{{dnac_username}}"
    dnac_password: "{{dnac_password}}"
    dnac_verify: "{{dnac_verify}}"
    dnac_port: "{{dnac_port}}"
    dnac_version: "{{dnac_version}}"
    dnac_debug: "{{dnac_debug}}"
    state: absent
    deviceRoles: string
    fabricId: string
    networkDeviceId: string

- name: Create
  cisco.dnac.sda_fabric_devices:
    dnac_host: "{{dnac_host}}"
    dnac_username: "{{dnac_username}}"
    dnac_password: "{{dnac_password}}"
    dnac_verify: "{{dnac_verify}}"
    dnac_port: "{{dnac_port}}"
    dnac_version: "{{dnac_version}}"
    dnac_debug: "{{dnac_debug}}"
    state: present
    payload:
    - borderDeviceSettings:
        borderTypes:
        - string
        layer3Settings:
          borderPriority: 0
          importExternalRoutes: true
          isDefaultExit: true
          localAutonomousSystemNumber: string
          prependAutonomousSystemCount: 0
      deviceRoles:
      - string
      fabricId: string
      networkDeviceId: string

- name: Delete by id
  cisco.dnac.sda_fabric_devices:
    dnac_host: "{{dnac_host}}"
    dnac_username: "{{dnac_username}}"
    dnac_password: "{{dnac_password}}"
    dnac_verify: "{{dnac_verify}}"
    dnac_port: "{{dnac_port}}"
    dnac_version: "{{dnac_version}}"
    dnac_debug: "{{dnac_debug}}"
    state: absent
    id: string

"""
RETURN = r"""
dnac_response:
  description: A dictionary or list with the response returned by the Cisco DNAC Python SDK
  returned: always
  type: dict
  sample: >
    {
      "response": {
        "taskId": "string",
        "url": "string"
      },
      "version": "string"
    }
"""
