- name: Install Broadcast
  hosts: Lothlorien
  tasks:
  - name: Create Broadcast bedroom speaker audio Docker volume directory
    become: true
    ansible.builtin.file:
      path: /data/broadcast-bedroom-speaker-audio
      state: directory
  - name: Create Broadcast bedroom speaker audio Docker volume
    community.docker.docker_volume:
      volume_name: broadcast-bedroom-speaker-audio
      driver: local
      driver_options:
        type: none
        o: bind
        device: /data/broadcast-bedroom-speaker-audio

  - name: Create temporary Docker build directory for broadcast-player
    ansible.builtin.tempfile:
      state: directory
    register: docker_build_dir
  - name: Copy Docker build directory
    ansible.builtin.copy:
      src: player/
      dest: '{{docker_build_dir.path}}'
      mode: preserve
  - name: Build broadcast-player Docker image
    ansible.builtin.docker_image:
      build:
        path: '{{docker_build_dir.path}}'
      name: broadcast-player
      tag: latest
      source: build
      force_source: true
      state: present
  - name: Remove temporary Docker build directory
    become: true
    ansible.builtin.file:
      path: '{{docker_build_dir.path}}'
      state: absent

  - name: Create temporary Docker build directory for broadcast-ntfy-router
    ansible.builtin.tempfile:
      state: directory
    register: docker_build_dir
  - name: Copy Docker build directory
    ansible.builtin.copy:
      src: ntfy_router/
      dest: '{{docker_build_dir.path}}'
      mode: preserve
  - name: Build broadcast-ntfy-router Docker image
    ansible.builtin.docker_image:
      build:
        path: '{{docker_build_dir.path}}'
      name: broadcast-ntfy-router
      tag: latest
      source: build
      force_source: true
      state: present
  - name: Remove temporary Docker build directory
    become: true
    ansible.builtin.file:
      path: '{{docker_build_dir.path}}'
      state: absent

  - name: Read homelab config
    ansible.builtin.slurp:
      src: '{{ansible_user_dir}}/.homelab.json'
    register: homelab_config_file
  - name: Set homelab_config variable
    ansible.builtin.set_fact:
      homelab_config: '{{homelab_config_file.content|b64decode|from_json}}'

  - name: Insert into Postgres table service
    community.postgresql.postgresql_query:
      login_host: '{{homelab_config.database.host}}'
      login_user: '{{homelab_config.database.user}}'
      login_password: '{{homelab_config.database.password}}'
      db: '{{homelab_config.database.name}}'
      query: 'INSERT INTO service (name, host, source, config) VALUES (%s, %s, %s, %s) ON CONFLICT DO NOTHING;'
      positional_args:
      - '{{item.name}}'
      - '{{item.host}}'
      - '{{item.source}}'
      - '{{item.config}}'
    with_items:
    - {name: broadcast, host: '{{ansible_hostname}}', source: gitea/ashish/broadcast/master, config: null}
  - name: Insert into Postgres table service_port
    community.postgresql.postgresql_query:
      login_host: '{{homelab_config.database.host}}'
      login_user: '{{homelab_config.database.user}}'
      login_password: '{{homelab_config.database.password}}'
      db: '{{homelab_config.database.name}}'
      query: 'INSERT INTO service_port (service, port, domain, reverse_proxy, reverse_proxy_port) VALUES (%s, %s, %s, %s, %s) ON CONFLICT DO NOTHING;'
      positional_args:
      - '{{item.service}}'
      - '{{item.port}}'
      - '{{item.domain}}'
      - '{{item.reverse_proxy}}'
      - '{{item.reverse_proxy_port}}'
    with_items:
    - {service: broadcast, port: 10000, domain: null, reverse_proxy: null, reverse_proxy_port: null}
    - {service: broadcast, port: 10001, domain: null, reverse_proxy: null, reverse_proxy_port: null}
  - name: Insert into Postgres table service_data
    community.postgresql.postgresql_query:
      login_host: '{{homelab_config.database.host}}'
      login_user: '{{homelab_config.database.user}}'
      login_password: '{{homelab_config.database.password}}'
      db: '{{homelab_config.database.name}}'
      query: 'INSERT INTO service_data (service, data_name, storage_type, source) VALUES (%s, %s, %s, %s) ON CONFLICT DO NOTHING;'
      positional_args:
      - '{{item.service}}'
      - '{{item.data_name}}'
      - '{{item.storage_type}}'
      - '{{item.source}}'
    with_items:
    - {service: broadcast, data_name: bedroom_speaker_audio, storage_type: docker, source: broadcast-bedroom-speaker-audio}