import boto3
import json
from pyspark.sql.functions import lit,expr,to_date,split



var_awsaccountid = '44026XXXXXX89' # Input your accountId
qsclient = boto3.client('quicksight','us-west-2')
s3client = boto3.client('s3')


QSusers = qsclient.list_users(
    AwsAccountId=var_awsaccountid,
    MaxResults=100,
    Namespace='default'
)
#print(QSusers)


qsusers = {}
qsusers['users'] = []
for users in QSusers['UserList']:
    var_username = users['UserName'].split('/',2)[0]
    var_role = users['Role']
    var_active = users['Active']
    userrecord = { 'UserName': var_username,
                           'Role': var_role,
                           'Active':var_active}
    qsusers['users'].append(userrecord)
        
#print(qsusers)
QSmetadatajson_users = json.dumps(qsusers)
#print(QSmetadatajson_users)
s3client.put_object(Body=QSmetadatajson_users, Bucket='quicksight-bionbi', Key='metadata/users/qsusers.json')


QSdatasets = qsclient.list_data_sets(
    AwsAccountId=var_awsaccountid,
    MaxResults=100
)

qsdatasets = {}
qsdatasets['datasets'] = []
for datasets in QSdatasets['DataSetSummaries']:
    var_datasetname = datasets['Name']
    var_importmode = datasets['ImportMode']
    
    datasetrecord = { 'datasetname':  var_datasetname,
                           'importmode': var_importmode}
    qsdatasets['datasets'].append(datasetrecord)
    
#print(qsdatasets)
QSmetadatajson_datasets = json.dumps(qsdatasets)
#print(QSmetadatajson_datasets)
s3client.put_object(Body=QSmetadatajson_datasets, Bucket='quicksight-bionbi', Key='metadata/datasets/qsdatasets.json')


QSanalyses = qsclient.list_analyses(
    AwsAccountId=var_awsaccountid,
    MaxResults=100
)
#print(QSanalyses)

analysisrecords = {}
analysisrecords['analysis'] = []

analysisdatasets = {}
analysisdatasets['analysisdatasets'] = []

for analyses in QSanalyses['AnalysisSummaryList']:
    var_analysisid = analyses['AnalysisId']
    var_analysisname = analyses['Name']
    analysisrecord = { 'AnalysisId':  var_analysisid,
                           'analysisname': var_analysisname}
    analysisrecords['analysis'].append(analysisrecord)
    
    
    
    analysesdetails = qsclient.describe_analysis(
    AwsAccountId=var_awsaccountid,
    AnalysisId=var_analysisid)
    
    #print(analysesdetails)
    for datasets in analysesdetails['Analysis']['DataSetArns']:
        var_datasetid = datasets.split('/',2)[1]
        print(analysesdetails['Analysis']['DataSetArns'])
        try: 
            datasetdetails = qsclient.describe_data_set(
                   AwsAccountId=var_awsaccountid,
                   DataSetId=var_datasetid)
        except Exception as e:
            print("Error occured:",str(e))
        
        
        #print(datasetdetails)
        var_datasetname = datasetdetails['DataSet']['Name']
        
        analysisdatasetrecord = { 'AnalysesName': var_analysisname,
                           'AnalysisId': var_analysisid,
                           'DatasetID':var_datasetid,
                           'DatasetName':var_datasetname }
        analysisdatasets['analysisdatasets'].append(analysisdatasetrecord)

#print(analysisrecords)
#print(analysisdatasets)
QSmetadatajson_analysis = json.dumps(analysisrecords)
QSmetadatajson_analysisdatasets = json.dumps(analysisdatasets)
#print(QSmetadatajson_analysisdatasets)
s3client.put_object(Body=QSmetadatajson_analysis, Bucket='quicksight-bionbi', Key='metadata/analysis/qsanalysis.json')
s3client.put_object(Body=QSmetadatajson_analysisdatasets, Bucket='quicksight-bionbi', Key='metadata/analysisdatasets/qsanalysisdatasets.json')

dashboard = client.describe_dashboard(
    AwsAccountId='440268960789',
    DashboardId='7b967426-e650-4afa-bb8d-82c257307407'
)

#print(dashboard)

client = boto3.client('s3')
client.put_object(Body=QSmetadatajson, Bucket='quicksight-bionbi', Key='metadata/QSMetadata.json')

