# upload_one_cv_to_ats_with_code.py
import requests
from pathlib import Path
import re
import time

# ===== بيانات Zoho =====
CLIENT_ID = "1000.ZNQ17ZU1F48Z6DTTBKPRS8HYYGPU2C"
CLIENT_SECRET = "31128c41fe165770eabec0110a9f121b8a9e0846d9"
AUTH_CODE = "1000.c93eb3f36267b1266d7d2d65abb21588.c537f0d10b43e39e160325d28ffd7085"
REDIRECT_URI = "https://www.zoho.com"  # عادة يمكن وضع أي URI مسجل مع التطبيق
RECRUIT_API_BASE = "https://recruit.zoho.com/recruit/v2"
CV_FOLDER = Path(r"D:\zohocv\batch_0")

# ===== دوال مساعدة =====
def get_access_token():
    url = "https://accounts.zoho.com/oauth/v2/token"
    data = {
        "code": AUTH_CODE,
        "client_id": CLIENT_ID,
        "client_secret": CLIENT_SECRET,
        "redirect_uri": REDIRECT_URI,
        "grant_type": "authorization_code"
    }
    r = requests.post(url, data=data)
    try:
        r.raise_for_status()
        token = r.json()["access_token"]
        print("[INFO] Access token obtained.")
        return token
    except Exception as e:
        print("[ERROR] Failed to get access token!")
        print("Status Code:", r.status_code)
        print("Response:", r.text)
        raise e

def search_ats_record_by_email(access_token, email):
    headers = {"Authorization": f"Zoho-oauthtoken {access_token}"}
    criteria = f"(Email:equals:{email})"
    url = f"{RECRUIT_API_BASE}/ATS/search?criteria={requests.utils.quote(criteria)}"
    r = requests.get(url, headers=headers)
    if r.status_code == 200:
        data = r.json().get("data")
        if data:
            return data[0]["id"]
    return None

def upload_attachment_to_ats(access_token, record_id, file_path):
    url = f"{RECRUIT_API_BASE}/ATS/{record_id}/Attachments"
    headers = {"Authorization": f"Zoho-oauthtoken {access_token}"}
    with open(file_path, "rb") as f:
        files = {"file": f}
        r = requests.post(url, headers=headers, files=files)
        return r


def extract_search_key_from_filename(stem: str):
    stem = re.sub(r'_\d+$', '', stem)
    return stem.replace("_", "@", 1).replace("_", ".")

# ===== البرنامج الرئيسي =====
def main():
    access_token = get_access_token()

    # خذ أول ملف فقط للتجربة
    files = sorted([f for f in CV_FOLDER.iterdir() if f.is_file() and f.suffix.lower() in ['.pdf', '.doc', '.docx']])
    if not files:
        print("[!] No CV files found in folder.")
        return

    f = files[0]  # ملف واحد فقط للتجربة
    stem = f.stem
    search_key = extract_search_key_from_filename(stem)
    print(f"[PROCESS] {f.name} -> search key: {search_key}")

    record_id = search_ats_record_by_email(access_token, search_key)
    if not record_id:
        print(f"[NOT FOUND] ATS record with search key: {search_key}")
        return

    print(f"[FOUND] record_id = {record_id}, uploading {f.name}")
    resp = upload_attachment_to_ats(access_token, record_id, f)
    if resp.status_code == 200:
        print(f"[OK] Uploaded {f.name}")
    else:
        print(f"[ERROR] Failed {f.name}: {resp.text}")

if __name__ == "__main__":
    main()
