import os
import sys
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
import google.auth
from google.oauth2.credentials import Credentials

def create_service():
    # Chemin vers le fichier de token
    token_path = 'token_Gdoc.json'
    creds = None

    # Charger les credentials existants si possible
    if os.path.exists(token_path):
        creds = Credentials.from_authorized_user_file(token_path, scopes=[
            'https://www.googleapis.com/auth/documents',
            'https://www.googleapis.com/auth/drive'
        ])

    # Si les credentials ne sont pas valides ou n'existent pas, utiliser le fichier client secret
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'oauth_credentials.json', scopes=[
                    'https://www.googleapis.com/auth/documents',
                    'https://www.googleapis.com/auth/drive'
                ])
            creds = flow.run_local_server(port=0)
        
        # Sauvegarder les credentials pour la prochaine exécution
        with open(token_path, 'w') as token:
            token.write(creds.to_json())

    service = build('docs', 'v1', credentials=creds)
    drive_service = build('drive', 'v3', credentials=creds)
    return service, drive_service, creds

def add_permissions(drive_service, file_id, user_email):
    # Ajouter des permissions à l'utilisateur
    user_permission = {
        'type': 'user',
        'role': 'writer',
        'emailAddress': user_email
    }
    drive_service.permissions().create(
        fileId=file_id,
        body=user_permission,
        fields='id'
    ).execute()

def duplicate_document(document_id, copy_title, user_email, site_name, document_id2, copy_title2):
    service, drive_service, creds = create_service()

    # Copier le document via Google Drive API
    copied_file = {'name': copy_title}
    drive_response = drive_service.files().copy(fileId=document_id, body=copied_file).execute()
    new_document_id = drive_response.get('id')


    script_PHP = "/var/www/"+ site_name +"/conf/conf.php"
    with open(script_PHP, "r") as fichier_php:
        contenu = fichier_php.read()
    contenu_modifie = contenu.replace("1obEONaSzt_GuB7zfaxNtfiNcn5KTdenu-gACv0xXaM4", new_document_id)
    with open(script_PHP, "w") as fichier_php:
        fichier_php.write(contenu_modifie)


    # Ajouter des permissions d'écriture
    add_permissions(drive_service, new_document_id, user_email)


    copied_file2 = {'name': copy_title2}
    drive_response = drive_service.files().copy(fileId=document_id2, body=copied_file2).execute()
    new_document_id2 = drive_response.get('id')


    script_PHP = "/var/www/"+ site_name +"/conf/conf.php"
    with open(script_PHP, "r") as fichier_php:
        contenu = fichier_php.read()
    contenu_modifie = contenu.replace("1Fkck5M1csPO5hhoRGzTASWfmWf09ysfUVvmFcKyFVWA", new_document_id2)
    with open(script_PHP, "w") as fichier_php:
        fichier_php.write(contenu_modifie)

    # Ajouter des permissions d'écriture
    add_permissions(drive_service, new_document_id2, user_email)



    print(new_document_id)
    return new_document_id


if __name__ == "__main__":
    if len(sys.argv) < 3:
        print("Usage: python script.py <site_name> <email>")
        sys.exit(1)

    site_name = sys.argv[1]
    email = sys.argv[2]
    original_document_id = '1obEONaSzt_GuB7zfaxNtfiNcn5KTdenu-gACv0xXaM4'  # Remplacer par l'ID réel
    original_document_id2 = '1Fkck5M1csPO5hhoRGzTASWfmWf09ysfUVvmFcKyFVWA'  # Remplacer par l'ID réel
    new_title = f'{site_name} - Surface'
    new_title2 = f'{site_name} - Magic'
    duplicate_document(original_document_id, new_title, email, site_name, original_document_id2, new_title2)
