# The preferred method of disabling the LAN would be to set iiab_lan_enabled:
# False before getting here but we are here...
# Well if we got here something changed with the gateway and ifcfg-WAN maybe
# no longer accurate. Note if DEVICE= is any ifcfg files the listed DEVICE
# becomes bound to the NAME in the ifcfg file. With the LAN files out of the
# way we can try the interfaces one by one starting with device_gw.

# Setting up three way conditions with the results
# skipped|changed|failed
# failure results in blowing away the ifcfg-WAN so lets make sure...

# We only got here by way of no detected gateway, lets see if we can pick-up
# transient change like cable issues.

- name: BAD DHCP defaults
  set_fact:
    dhcp_good: False

# don't shoot ourselves in the foot....
- name: Disable dhcpd server just because
  service:
    name: dhcpd
    state: stopped

### clear all connections first
# We should have the LAN torndown at this point.

- name: No ifcfg-WAN known
  debug:
    msg: "NO WAN known"
  when: not has_WAN

- name: Finding connection name for WiFi AP gateway first
  shell: egrep -rn NAME /etc/sysconfig/network-scripts/{{ has_wifi_gw }} |  gawk -F '=' '{print $2}'
  register: ap_name
  when: has_wifi_gw != "none" and has_ifcfg_gw != "none"

- name: Trying WiFi first
  shell: nmcli conn up id {{ ap_name.stdout }}
  register: try_wifi
  ignore_errors: yes
  when: ap_name is defined and ap_named.changed

- name: Checking for WiFi gateway
  shell: sleep 5 | ip route | grep default | awk '{print $5}'
  register: dhcp_wifi_results
  when: try_wifi is defined and try_wifi.changed

# We have the DEVICE?
- name: Now setting iiab_wan_iface based on WiFi
  set_fact:
    iiab_wan_iface: "{{ dhcp_wifi_results.stdout }}"
    dhcp_good: True
  when: dhcp_wifi_results.stdout is defined and dhcp_wifi_results.stdout != ""

- name: Trying ifcfg-WAN second
  shell: nmcli conn up id iiab-WAN
  register: dhcp_WAN
  ignore_errors: yes
  when: has_WAN

- name: BAD ifcfg-WAN
  debug:
    msg: "BAD WAN"
  when: dhcp_WAN is defined and dhcp_WAN|failed

- name: Delete ifcfg-WAN
  shell: rm -f /etc/sysconfig/network-scripts/ifcfg-WAN
  when: dhcp_WAN is defined and dhcp_WAN|failed and wan_ip == "dhcp"

- name: Setting no ifcfg-WAN
  set_fact:
    has_WAN: False
  when: dhcp_WAN is defined and dhcp_WAN|failed and wan_ip == "dhcp"

- name: Interface list
  shell: ls /sys/class/net | grep -v -e lo -e br -e tun
  register: adapter_list

# wired devices with no wire plugged in fail here
- name: Not risking an active device dropping all devices
  shell: nmcli d delete {{ item|trim }}
  ignore_errors: True
  when: item|trim != iiab_wireless_lan_iface and not dhcp_good and wan_ip == "dhcp"
  with_items:
    - "{{ adapter_list.stdout_lines }}"

# monitor-connection-files defaults to no with F21, F18-F20 defaults to yes
- name: Reloading nmcli for deleted files
  shell: nmcli con reload
  when: not installing and not no_NM_reload

# wired devices with no wire plugged in fail here
# discovered_wireless_iface might need work
- name: Try dhcp on all wired devices
  shell: nmcli d connect {{ item|trim }}
  ignore_errors: True
  when: item|trim != discovered_wireless_iface and item|trim != iiab_wireless_lan_iface and not dhcp_good and wan_ip == "dhcp"
  with_items:
    - "{{ adapter_list.stdout_lines }}"

# This should be neat on a VM with 2 bridged interfaces.
- name: Checking for gateway
  shell: sleep 5 | ip route | grep default | awk '{print $5}'
  register: dhcp_1BY1_results
  when: not has_WAN and not dhcp_good

# We have the DEVICE?
- name: Now setting iiab_wan_iface via nmcli
  set_fact:
    iiab_wan_iface: "{{ dhcp_1BY1_results.stdout }}"
    dhcp_good: True
  when: dhcp_1BY1_results.stdout is defined and dhcp_1BY1_results.stdout != "" and not has_WAN

- name: Find gateway config based on device
  shell: egrep -rn "{{ iiab_wan_iface }}" /etc/sysconfig/network-scripts/ifcfg* | gawk -F ':' '{print $1}'
  register: ifcfg_dhcp_device
  ignore_errors: True
  changed_when: False
  when: dhcp_good

- name: Setting has ifcfg gw based on device if found
  set_fact:
    has_ifcfg_gw: "{{ item|trim }}"
  when: dhcp_good and ifcfg_dhcp_device is defined and item|trim != ""
  with_items:
    - "{{ ifcfg_dhcp_device.stdout_lines }}"
  ignore_errors: True

# wired devices with no wire plugged in fail here
- name: Disconnect wired devices
  shell: nmcli c down id "System{{ item|trim }}"
  ignore_errors: True
  when: item|trim != iiab_wireless_lan_iface and item|trim != iiab_wan_iface and wan_ip == "dhcp"
  with_items:
    - "{{ adapter_list.stdout_lines }}"

### keep at end.
### If dhcp fails the single interface will become LAN again because we didn't prevent the creation
# Now disable LAN if single interface
- name: DHCP found on Single interface forcing LAN disabled
  set_fact:
    iiab_lan_iface: "none"
  when: dhcp_good and adapter_count.stdout|int == "1"
