Env.dump(self, ['ip', cookbook_name], repo: cookbook_name)

Common.directories(self, [node['assistant']['dir']['data']])

Common.packages(self, %w[build-essential bluez dbus-broker git mc pkg-config libmariadb-dev-compat python3-pip python3-venv])

link '/config' do
  to node['assistant']['dir']['data']
  owner node['app']['user']
  group node['app']['group']
end

[node['assistant']['dir']['env'], node['configurator']['dir']].each do |dir|
  execute "create_environment_#{::File.basename(dir)}" do
    command "python3 -m venv #{dir}"
    user node['app']['user']
    group node['app']['group']
    not_if { ::File.exist?("#{dir}/bin/activate") }
  end
end

execute 'install_assistant' do
  command "#{node['assistant']['dir']['env']}/bin/pip install webrtcvad wheel homeassistant mysqlclient psycopg2-binary isal pycares"
  user node['app']['user']
  group node['app']['group']
  not_if { ::File.exist?("#{node['assistant']['dir']['env']}/bin/hass") }
end

execute 'install_configurator' do
  command "#{node['configurator']['dir']}/bin/pip install legacy-cgi hass-configurator"
  user node['app']['user']
  group node['app']['group']
  not_if { ::File.exist?("#{node['configurator']['dir']}/bin/hass-configurator") }
end

ruby_block "restore_snapshot_if_exists" do
  block { Utils.snapshot(self, node['snapshot']['data'], restore: true) }
end

Common.application(self, cookbook_name, cwd: node['assistant']['dir']['data'],
  exec: "#{node['assistant']['dir']['env']}/bin/python3 -m homeassistant --config #{node['assistant']['dir']['data']}",
  unit: { 'Service' => { 'RestartForceExitStatus' => '100',
    'Environment' => "PATH=#{node['assistant']['dir']['env']}/bin:/usr/local/bin:/usr/bin" } } )

Common.application(self, 'configurator', cwd: node['assistant']['dir']['data'],
  exec:  "#{node['configurator']['dir']}/bin/hass-configurator -s -e -b #{node['assistant']['dir']['data']}" )