#!/usr/bin/env python3
# coding: utf-8

import requests
import json
import os

host = "http://rocketchat:3000"
path = "/api/v1/login"

bot_name = 'ROCKETCHAT_USER'
bot_password = 'ROCKETCHAT_PASSWORD'
bot_email = botname + '@email.com'
admin_name = 'ADMIN_USERNAME'
admin_password = 'ADMIN_PASS'

def get_authentication_token():
    login_data = {"username": admin_name, "password": admin_password}
    response = requests.post(host+path, data=json.dumps(login_data))
    if response.json()['status'] == 'success':
        print("login suceeded\n")

        authToken = response.json()['data']['authToken']
        userId = response.json()['data']['userId']
        user_header = {
            "X-Auth-Token": authToken,
            "X-User-Id": userId,
            "Content-Type": "application/json"
        }

        return user_header


user_header = get_authentication_token()


def create_user():
    user_info = {
        "name": bot_name,
        "email": bot_email,
        "password": bot_password,
        "username": bot_name,
        "requirePasswordChange": False,
        "sendWelcomeEmail": True, "roles": ['bot']
    }

    create_user_response = requests.post(
        host + "/api/v1/users.create",
        data=json.dumps(user_info),
        headers=user_header
    )

    if create_user_response.json()['success'] is True:
        print("User has been sucessfully created!")
    else:
        print("Error while creating bot user!")


def create_agent():
    agent_info = {"username": bot_name}
    create_agent_response = requests.post(
        host + "/api/v1/livechat/users/agent",
        data=json.dumps(agent_info),
        headers=user_header
    )

    if create_agent_response.json()['success'] is True:
        print("Bot agent has been sucessfully created!")
    else:
        print("Error while creating bot agent!")

    return create_agent_response


def configure_livechat():
    # Enable Livechat
    requests.post(
        host + "/api/v1/settings/Livechat_enabled",
        data=json.dumps({"value": True}),
        headers=user_header
    )

    # Disable show pre-registration form
    requests.post(
        host + "/api/v1/settings/Livechat_registration_form",
        data=json.dumps({"value": False}),
        headers=user_header
    )


def create_department(bot_agent_id):
    department_info = {
        "department": {
            "enabled": True,
            "showOnRegistration": True,
            "name": "department",
            "description": "default department"
        },
        "agents": [{
            "agentId": bot_agent_id,
            "username": bot_name,
            "count": 0,
            "order": 0
        }]
    }
    create_department_response = requests.post(
        host + "/api/v1/livechat/department",
        data=json.dumps(department_info),
        headers=user_header
    )

    if create_department_response.json()['success'] is True:
        print("Default department has been sucessfully created!")
    else:
        print("Error while creating department!")


if user_header:
    create_user()

    create_agent_response = create_agent()
    bot_agent_id = create_agent_response.json()['user']['_id']

    configure_livechat()

    create_department(bot_agent_id)

else:
    print("login failed")