# -*- coding: utf-8 -*-
import os
import sys
import googleapiclient.discovery
from google.oauth2 import service_account
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials

if len(sys.argv) != 3:
    print("Utilisation: python nom_du_script.py NOM_DU_SITE")
    sys.exit(1)

site_name = sys.argv[1]
email = sys.argv[2]
url_content = ""
url_knowledge = ""
# Get the directory of the currently running script
script_directory = os.path.dirname(os.path.realpath(__file__))
nomDuSite = f"{site_name}"
script_PHP = "/var/www/"+ nomDuSite +"/conf/conf.php"

# OAuth2 scopes for Google Sheets and Google Drive
oauth_scopes = [
    'https://www.googleapis.com/auth/spreadsheets',
    'https://www.googleapis.com/auth/drive',
    'https://www.googleapis.com/auth/script.projects'
]

# Initialize OAuth2 credentials
flow = InstalledAppFlow.from_client_secrets_file(
    'oauth_credentials.json', oauth_scopes)
credentials = None

if os.path.exists('token.json'):
    credentials = Credentials.from_authorized_user_file('token.json', oauth_scopes)

if not credentials or not credentials.valid:
    if credentials and credentials.expired and credentials.refresh_token:
        credentials.refresh(Request())
    else:
        credentials = flow.run_local_server(port=0)
    with open('token.json', 'w') as token:
        token.write(credentials.to_json())

# Create Google API services
drive_service = googleapiclient.discovery.build('drive', 'v3', credentials=credentials)
script_service = googleapiclient.discovery.build('script', 'v1', credentials=credentials)
sheets_service = googleapiclient.discovery.build('sheets', 'v4', credentials=credentials)



# Load your manifest from the file
with open(os.path.join(script_directory, "appsscript.json"), "r") as f:
    manifest_code = f.read()

# List of Google Sheets URLs to duplicate
sheet_urls = [
    'https://docs.google.com/spreadsheets/d/111hVTxUzoMiQMRlj-r_Wr4j4asEEfUazto7eUoOtVYI/edit',
    'https://docs.google.com/spreadsheets/d/1yrrrZKc5hrXYDY22IQn_y496lq06VxOV9zstQOzCf-I/edit'
]

# Nouvelle variable pour suivre l'indice de l'URL dans la liste
url_index = 0

for sheet_url in sheet_urls:
    try:
        sheet_id = sheet_url.split('/')[-2]
        sheet_details = sheets_service.spreadsheets().get(spreadsheetId=sheet_id).execute()
        sheets = sheet_details['sheets']

        new_spreadsheet = sheets_service.spreadsheets().create().execute()
        new_spreadsheet_id = new_spreadsheet['spreadsheetId']
        initial_sheet_id = new_spreadsheet['sheets'][0]['properties']['sheetId']

        # Déterminer le nouveau nom du Google Sheet en fonction de l'URL
        if url_index == 0:
            with open(script_PHP, "r") as fichier_php:
                contenu = fichier_php.read()
            typeGoogleSheet = f"Knowledge"
            new_name = f"{site_name} Knowledge"
            siteName = f"{site_name}"
            contenu_modifie = contenu.replace("{site}", siteName)
            with open(script_PHP, "w") as fichier_php:
                fichier_php.write(contenu_modifie)
                
                
                
                
            with open(script_PHP, "r") as fichier_php:
                contenu = fichier_php.read()
            contenu_modifie = contenu.replace("1l3Idrs1Q-yiMoQibqhah2k5D0XtJ4VPZxwFv0jX3LBA", new_spreadsheet_id)
            url_knowledge = new_spreadsheet_id
            with open(script_PHP, "w") as fichier_php:
                fichier_php.write(contenu_modifie)
                
            
        elif url_index == 1:
            with open(script_PHP, "r") as fichier_php:
                contenu = fichier_php.read()
            new_name = f"{site_name} Content" 
            typeGoogleSheet = f"Content" 
            contenu_modifie = contenu.replace("1F6V45aq2Mc1j15t_gGyQ2LASvtiFvrVpG1mLpHpXSBg", new_spreadsheet_id)
            url_content = new_spreadsheet_id
            with open(script_PHP, "w") as fichier_php:
                fichier_php.write(contenu_modifie)
        
        # Mettre à jour le nom du Google Sheet
        sheets_service.spreadsheets().batchUpdate(
            spreadsheetId=new_spreadsheet_id,
            body={
                "requests": [
                    {
                        "updateSpreadsheetProperties": {
                            "properties": {
                                "title": new_name
                            },
                            "fields": "title"
                        }
                    }
                ]
            }
        ).execute()
        
        email_address = "serviceaccountforindexa@high-codex-398815.iam.gserviceaccount.com"
        drive_permission = {
            'type': 'user',
            'role': 'writer',
            'emailAddress': email_address
        }
        drive_service.permissions().create(
            fileId=new_spreadsheet_id,
            body=drive_permission,
            fields='id'
        ).execute()
        
        email_address = email
        drive_permission = {
            'type': 'user',
            'role': 'writer',
            'emailAddress': email_address
        }
        drive_service.permissions().create(
            fileId=new_spreadsheet_id,
            body=drive_permission,
            fields='id'
        ).execute()

        
        
        for sheet in sheets:
            request = {
                'destinationSpreadsheetId': new_spreadsheet_id,
            }
            copied_sheet = sheets_service.spreadsheets().sheets().copyTo(
                spreadsheetId=sheet_id,
                sheetId=sheet['properties']['sheetId'],
                body=request
            ).execute()

            new_sheet_id = copied_sheet['sheetId']
            original_name = sheet['properties']['title']
            sheets_service.spreadsheets().batchUpdate(
                spreadsheetId=new_spreadsheet_id,
                body={
                    "requests": [
                        {
                            "updateSheetProperties": {
                                "properties": {
                                    "sheetId": new_sheet_id,
                                    "title": original_name
                                },
                                "fields": "title"
                            }
                        }
                    ]
                }
            ).execute()
            
            
        # worksheet = sheets_service.spreadsheets().values()
        # update_request = worksheet.update(
        # spreadsheetId=new_spreadsheet_id,
        # range="Feuille1!B1",  # Modifiez la plage en fonction de votre feuille et de la cellule cible
        # valueInputOption="RAW",
        # body={
            # "values": [[f"{site_name}"]]
         # }
        # )
        # response = update_request.execute()

        sheets_service.spreadsheets().batchUpdate(
            spreadsheetId=new_spreadsheet_id,
            body={
                "requests": [
                    {
                        "deleteSheet": {
                            "sheetId": initial_sheet_id
                        }
                    }
                ]
            }
        ).execute()

        for sheet in sheets:
            # Obtenez toutes les données de la feuille
            data = sheets_service.spreadsheets().values().get(spreadsheetId=new_spreadsheet_id, range=sheet['properties']['title']).execute()
            values = data.get('values', [])
            
            # Si aucune donnée n'a été trouvée, passez à la prochaine feuille
            if not values:
                continue
            
            # Trouvez toutes les cellules contenant "indexa-for-content.simplex.live" et remplacez-les
            new_values = []
            for row in values:
                new_row = [cell.replace('indexa-for-content.simplex.live', f'{site_name}') if cell and 'indexa-for-content.simplex.live' in cell else cell for cell in row]
                new_values.append(new_row)
            
            # Mettez à jour la feuille avec les nouvelles valeurs
            sheets_service.spreadsheets().values().update(spreadsheetId=new_spreadsheet_id, range=sheet['properties']['title'], valueInputOption="RAW", body={"values": new_values}).execute()




        print(f"Duplicated sheets successfully to new Google Sheet: {new_spreadsheet_id}, Named: {new_name}")
        
        # Load your script from the file
        with open(os.path.join(script_directory, "ScriptApp.txt"), "r") as f:
            script_code = f.read()

        NomDeSite = f"{site_name}"
        script_code = script_code.replace("__source__", typeGoogleSheet)
        script_code = script_code.replace("__site__", NomDeSite)



        try:
            new_project_metadata = {
                'title': f"SimplexSynchro",
                'parentId': new_spreadsheet_id
            }
            new_project = script_service.projects().create(body=new_project_metadata).execute()
            
            new_project_id = new_project['scriptId']
            update_request = {
                'files': [
                    {
                        'name': 'Code',
                        'type': 'SERVER_JS',
                        'source': script_code
                    },
                    {
                        'name': 'appsscript',
                        'type': 'JSON',
                        'source': manifest_code
                    }
                ]
            }
            script_service.projects().updateContent(
                scriptId=new_project_id,
                body=update_request
            ).execute()

        except Exception as e:
            print(f"An error occurred: {e}")
            continue
        
        #Incrémenter l'indice de l'URL
        url_index += 1

        print("Copies have been created successfully.")


    except googleapiclient.errors.HttpError as http_error:
        if "Internal error encountered" in str(http_error):
            print("Retrying due to Internal error encountered...")
            # Add any delay or back-off logic here if needed
            continue
        else:
            print(f"An unexpected error occurred: {http_error}")
            break  # Exit the loop if it's not an internal error
import subprocess

# Paramètres à passer
param1 = f"{email_address}"
param2 = f"{site_name}"
param3 = f"{url_content}"
param4 = f"{url_knowledge}"

# Appel du script avec les paramètres
result = subprocess.run(['python3', 'Dupli_Gdoc.py', param2, param1], capture_output=True, text=True)
param5 = result.stdout.strip()
print(param5)
subprocess.run(['python3', 'email_create.py', param1, param2, param3, param4, param5])