import configparser
import argparse
from bs4 import BeautifulSoup
import json
from elasticsearch import Elasticsearch
import os
import datetime
import requests
from requests.auth import HTTPBasicAuth

PARSER = argparse.ArgumentParser()
PARSER.add_argument("-j", "--CI_JOB_ID", default='1')
PARSER.add_argument("-n", "--PROJECT_NAME", default='proj')
PARSER.add_argument("-p", "--PRODUCT_NAME", default='product')
PARSER.add_argument("-i", "--INDEX_NAME", default='proj')
PARSER.add_argument("-eh", "--elk_host")
PARSER.add_argument("-ep", "--elk_port")
PARSER.add_argument("-epw", "--elk_pwd")
ARGS = PARSER.parse_args()

elastic_client = Elasticsearch(hosts=[{'host': str(ARGS.elk_host), 'port': str(ARGS.elk_port)}], http_auth=('elastic', str(ARGS.elk_pwd)))

m_filePath = os.getcwd()
m_Dir = m_filePath + os.sep + "test-report.html"

def myconverter(o):
    if isinstance(o, datetime.datetime):
        return o.__str__()

def htmlparser(build):
    diff_dict={}
    with open(m_filePath+ os.sep + "test-report.html", "r") as f:
#if windows machine use this command : with open(m_filePath+ os.sep + "test-report.html", "r",encoding="UTF-8") as f:
        content = f.read()
        soup = BeautifulSoup(content, 'html.parser')
        data = soup.find("script").string
        data1 = data[21:]
        data2 = json.loads(data1)
        data3 = json.loads(data2)
        passedtestcount = data3["numPassedTests"]
        failuretestcount = data3["numFailedTests"]
        pendingtestcount = data3["numPendingTests"]
        totaltestcount = passedtestcount + failuretestcount + pendingtestcount
        passedsuitcount = data3["numPassedTestSuites"]
        failuresuitcount = data3["numFailedTestSuites"]
        pendingsuitcount = data3["numPendingTestSuites"]
        totalsuitcount = passedsuitcount + failuresuitcount + pendingsuitcount
        diff_dict = {'tests.passed': passedtestcount, 'tests.failed': failuretestcount, 'tests.pending': pendingtestcount, 'tests.total': totaltestcount, 'suites.passed': passedsuitcount, 'suites.failed': failuresuitcount, 'suites.pending': pendingsuitcount, 'suites.total': totalsuitcount}

    diff_dict["build.no"] = build
    diff_dict["module"] = str(ARGS.PROJECT_NAME)
    diff_dict["product"] = str(ARGS.PRODUCT_NAME)
    diff_dict["test.type"] = "jest"
    diff_dict['timestamp'] = datetime.datetime.utcnow()
    # diff_dict = data
    print(diff_dict)
    return diff_dict


def jsonfile():
    build = str(ARGS.CI_JOB_ID)
    with open("jest.json", "w") as outfile:
        json.dump(htmlparser(build), outfile, indent=4, default=myconverter)
        elastic_client.index(index=str(ARGS.INDEX_NAME), doc_type=str(ARGS.INDEX_NAME)+'_log',
                             body=htmlparser(build), request_timeout=100)
        elastic_client.indices.refresh(index=str(ARGS.INDEX_NAME), request_timeout=100)

    return 'done'

jsonfile()
