import msal
import requests
import os
from dotenv import load_dotenv
from datetime import datetime, timedelta

dotenv_path = "/var/www/html/cag/.env"
load_dotenv(dotenv_path=dotenv_path)

CLIENT_ID = os.getenv("CLIENT_ID")
CLIENT_SECRET = os.getenv("CLIENT_SECRET")
TENANT_ID = os.getenv("TENANT_ID")

AUTHORITY = f"https://login.microsoftonline.com/{TENANT_ID}"
SCOPES = ["https://graph.microsoft.com/.default"]

def get_access_token():
    print("🔵 Obtendo token de acesso...")
    try:
        app = msal.ConfidentialClientApplication(
            CLIENT_ID,
            authority=AUTHORITY,
            client_credential=CLIENT_SECRET
        )
        result = app.acquire_token_for_client(scopes=SCOPES)
        if 'access_token' in result:
            print("✅ Token de acesso obtido com sucesso!")
            return result['access_token']
        else:
            print(f"❌ Erro ao obter token: {result.get('error_description')}")
            return None
    except Exception as e:
        print(f"❌ Erro ao tentar obter token: {e}")
        return None

def criar_reuniao_no_teams(titulo, data_hora, organizer_id):
    """ Cria uma reunião no Microsoft Teams e retorna o link. """

    access_token = get_access_token()
    if not access_token:
        print("❌ Não foi possível obter o token de acesso.")
        return None

    url = f"https://graph.microsoft.com/v1.0/users/{organizer_id}/onlineMeetings"
    headers = {
        "Authorization": f"Bearer {access_token}",
        "Content-Type": "application/json"
    }

    # ⚠️ Convertendo para 'YYYY-MM-DDTHH:MM:SSZ' sem offset duplicado
    # Exemplo final: 2025-01-31T21:06:00Z
    start_str = data_hora.replace(tzinfo=None).isoformat()  # remove timezone
    end_str = (data_hora.replace(tzinfo=None) + timedelta(hours=1)).isoformat()

    # Adicionar "Z" no final (indicando UTC)
    if not start_str.endswith("Z"):
        start_str += "Z"
    if not end_str.endswith("Z"):
        end_str += "Z"

    payload = {
        "subject": titulo,
        "startDateTime": start_str,
        "endDateTime": end_str,
        "participants": {
            "organizer": {
                "identity": {
                    "user": {
                        "id": organizer_id
                    }
                }
            },
            "attendees": []
        }
    }

    print("🔵 Enviando requisição para criar reunião no Teams...")
    print("🔹 URL:", url)
    print("🔹 Payload:", payload)

    try:
        response = requests.post(url, headers=headers, json=payload)
        print("🔵 Resposta da API:", response.status_code)
        print("🔹 Conteúdo:", response.text)

        if response.status_code == 201:
            join_url = response.json().get('joinWebUrl')
            print(f"✅ Reunião criada com sucesso! Link: {join_url}")
            return join_url
        else:
            print(f"❌ Erro ao criar reunião: {response.json()}")
            return None
    except Exception as e:
        print(f"❌ Erro ao conectar com a API do Microsoft Graph: {e}")
        return None
