#!/bin/bash
#
# Title:      Handbrake for PlexGuide
# Author(s):  timekills
# URL:        https://plexguide.com - https://github.com/timekills
# GNU:        General Public License v3.0
################################################################################
---
- hosts: localhost
  gather_facts: false
  tasks:
    # FACTS #######################################################################

    - name: 'Set Known Facts'
      set_fact:
        pgrole: 'handbrake'
        intport: '5800'
        extport: '5800'
        image: 'jlesage/handbrake:dev-latest'

    # CORE (MANDATORY) ############################################################
    - name: 'Including cron job'
      include_tasks: '/opt/plexguide/containers/_core.yml'

    # MIGRATIONS (REMOVE SECTION ON MARCH 1st) #############################################################
    - name: 'Check for old volumes'
      stat:
        path: '{{path.stdout}}/{{pgrole}}'
      register: oldcheck

    - name: 'Get home variable'
      debug: homestorage=ansible_env.HOME

    # LABELS ######################################################################
    - name: 'Adding Traefik'
      set_fact:
        pg_labels:
          traefik.enable: 'true'
          traefik.port: '{{intport}}'
          traefik.frontend.auth.basic: "plex:$apr1$tosnCNtX$XKXnDaIiW7f0y1nwmd.KL0"
          traefik.frontend.rule: 'Host:{{pgrole}}.{{domain.stdout}},{{tldset}}'

    - name: 'Setting PG Volumes'
      set_fact:
        pg_volumes:
          - '/opt/appdata/{{pgrole}}/config:/config:rw'
          - '/:/storage:ro'
          - '{{path.stdout}}:{{path.stdout}}'
          - '/mnt/unionfs:/mnt/unionfs'
          - '{{path.stdout}}/{{pgrole}}/watch/Very_Fast_1080p30:/watch:rw'
          - '{{path.stdout}}/{{pgrole}}/watch/HQ_1080p30_Surround:/watch2:rw'
          - '{{path.stdout}}/{{pgrole}}/watch/1080mkv:/watch3:rw'
          - '{{path.stdout}}/{{pgrole}}/complete/:/output:rw'
          - '/dev/dri:/dev/dri:rw'
          - '/etc/localtime:/etc/localtime:ro'

    - name: 'Setting PG ENV'
      set_fact:
        pg_env:
          USER_ID: 1000
          GROUP_ID: 1000
          AUTOMATED_CONVERSION_PRESET: "Very Fast 1080p30"
          AUTOMATED_CONVERSION_FORMAT: "mp4"
          AUTOMATED_CONVERSION_PRESET_2: "HQ 1080p30 Surround"
          AUTOMATED_CONVERSION_FORMAT_2: "mp4"
          AUTOMATED_CONVERSION_PRESET_3: "H.264 MKV 1080p30"
          AUTOMATED_CONVERSION_FORMAT_3: "mkv"
#          SECURE_CONNECTION: 1

    # MAIN DEPLOYMENT #############################################################
    - name: 'Create watch directory for {{pgrole}}'
      file:
        path: '{{path.stdout}}/handbrake/watch'
        state: directory
        owner: 1000
        group: 1000
        mode: 0755
        recurse: yes

    - name: 'Create complete directory for {{pgrole}}'
      file:
        path: '{{path.stdout}}/handbrake/complete'
        state: directory
        owner: 1000
        group: 1000
        mode: 0755
        recurse: yes

    - name: 'Deploying {{pgrole}}'
      docker_container:
        name: '{{pgrole}}'
        image: '{{image}}'
        pull: yes
        published_ports:
          - '{{ports.stdout}}{{extport}}:{{intport}}'
        volumes: '{{pg_volumes}}'
        env: '{{pg_env}}'
        restart_policy: unless-stopped
        networks:
          - name: plexguide
            aliases:
              - '{{pgrole}}'
        state: started
        labels: '{{pg_labels}}'

    - name: 'Wait 6 Seconds'
      wait_for:
        timeout: 6

    - name: Stop Container
      docker_container:
        name: '{{pgrole}}'
        state: stopped

    # ENDING FOR HANDBRAKE ###########################################################

#    - name: 'Waiting for {{pgrole}} to initialize'
#      wait_for:
#        path: '/opt/appdata/{{pgrole}}/core.conf'
#        state: present

    - name: 'Configuring {{pgrole}} for first time use'
      block:
        - name: 'Stopping {{pgrole}}'
          docker_container:
            name: '{{pgrole}}'
            state: stopped

#       - name: Setting plugins directory
#          lineinfile:
#            path: '/opt/appdata/{{pgrole}}/core.conf'
#            regexp: '"plugins_location"'
#            line: '"plugins_location": "/config/plugins",'
#            state: present

        - name: Restart Container
          docker_container:
            name: '{{pgrole}}'
            state: started
