import requests
from bs4 import BeautifulSoup
import time
import os
import re

# ----------------- تنظیمات -----------------
WEBHOOK_URL = "https://hook.eu1.make.com/83vtlq3badn2zsftjbxbvopty5cy6a58"
SEEN_FILE = "seen_jobs.txt"

SEARCH_URLS = [
    {
        "category": "تولید محتوا",
        "url": "https://jobinja.ir/jobs?&filters%5Bkeywords%5D%5B0%5D=%D9%85%D8%AD%D8%AA%D9%88%D8%A7&filters%5Bremote%5D=1&sort_by=published_at_desc"
    },
    {
        "category": "سئو (SEO)",
        "url": "https://jobinja.ir/jobs?&filters%5Bkeywords%5D%5B0%5D=%D8%B3%D8%A6%D9%88&filters%5Bremote%5D=1&sort_by=published_at_desc"
    }
]

HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
    "Accept-Language": "fa,en;q=0.9",
    "Referer": "https://jobinja.ir/"
}

def load_seen_jobs():
    if os.path.exists(SEEN_FILE):
        with open(SEEN_FILE, "r", encoding="utf-8") as f:
            return set(line.strip() for line in f if line.strip())
    return set()

def save_seen_job(job_url):
    with open(SEEN_FILE, "a", encoding="utf-8") as f:
        f.write(job_url + "\n")

def clean_text(text):
    if not text:
        return ""
    return re.sub(r'\s+', ' ', text).strip()

def get_job_details(job_url):
    details = {
        "company": "",
        "location": "دورکاری",
        "contract_type": "تمام وقت / پاره وقت",
        "company_website": "",
        "phone": "",
        "email": ""
    }
    try:
        resp = requests.get(job_url, headers=HEADERS, timeout=15)
        if resp.status_code == 200:
            soup = BeautifulSoup(resp.text, "html.parser")
            
            # ۱. نام شرکت
            comp_elem = soup.select_one("h2.c-companyHeader__name, .c-companyHeader__name, a.c-companyHeader__nameLink")
            if comp_elem:
                details["company"] = clean_text(comp_elem.get_text())

            # ۲. وب‌سایت شرکت
            site_elem = soup.select_one("a.c-companyHeader__website, a.c-companyHeader__metaItem, a[href*='http'][rel*='nofollow']")
            if site_elem and site_elem.get("href"):
                href = site_elem["href"].strip()
                if "jobinja.ir" not in href:
                    details["company_website"] = href

            # ۳. بررسی مشخصات باکس آگهی
            info_items = soup.select("li.c-infoBox__item, .c-infoBox__item")
            for item in info_items:
                text = item.get_text()
                
                # موقعیت مکانی
                if "موقعیت مکانی" in text:
                    val_elem = item.select_one(".c-infoBox__val, span, p")
                    raw_val = val_elem.get_text() if val_elem else text
                    details["location"] = clean_text(raw_val.replace("موقعیت مکانی", "").replace(":", ""))

                # نوع همکاری (مطمئن شویم تاریخ را بر ندارد)
                if "نوع همکاری" in text or "قرارداد" in text:
                    val_elem = item.select_one(".c-infoBox__val, span, p")
                    raw_val = val_elem.get_text() if val_elem else text
                    cleaned = clean_text(raw_val.replace("نوع همکاری", "").replace("قرارداد", "").replace(":", ""))
                    # اگر مقدار به اشتباه شامل کلمه روز یا پیش بود، یعنی تاریخ است؛ پس نادیده بگیر
                    if "روز" not in cleaned and "ماه" not in cleaned and len(cleaned) < 30:
                        details["contract_type"] = cleaned

            # ۴. ایمیل و شماره تماس
            desc_elem = soup.select_one(".c-jobDescription, .c-companyDescription")
            full_text = desc_elem.get_text() if desc_elem else resp.text
            
            phone_match = re.search(r'(?:0|\+98)?9\d{9}|(?:0\d{2,3}[- ]?)?\d{7,8}', full_text)
            if phone_match and len(phone_match.group(0)) >= 8:
                details["phone"] = phone_match.group(0).strip()

            email_match = re.search(r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+', full_text)
            if email_match:
                matched_email = email_match.group(0).lower()
                if "jobinja" not in matched_email:
                    details["email"] = matched_email

    except Exception as e:
        print(f"Error reading details: {e}")
        
    return details

def main():
    seen_jobs = load_seen_jobs()
    print(f"Loaded {len(seen_jobs)} previously processed jobs.")

    for item in SEARCH_URLS:
        category_name = item["category"]
        url = item["url"]
        print(f"\n--- Checking: {category_name} ---")

        try:
            res = requests.get(url, headers=HEADERS, timeout=20)
            if res.status_code != 200:
                continue

            soup = BeautifulSoup(res.text, "html.parser")
            job_cards = soup.select("li.o-listView__item, div.c-jobListView__item")
            if not job_cards:
                job_cards = soup.select("a.c-jobListView__titleLink")

            for card in job_cards:
                link_tag = card.select_one("a.c-jobListView__titleLink") if not card.name == 'a' else card
                if not link_tag:
                    continue

                job_url = link_tag.get("href", "").strip()
                if not job_url or job_url in seen_jobs:
                    continue

                title = clean_text(link_tag.get_text())

                # تاریخ انتشار از کارت اصلی صفحه لیست
                date_tag = card.select_one(".c-jobListView__passedDays")
                job_date = clean_text(date_tag.get_text()) if date_tag else "امروز"

                time.sleep(2)
                details = get_job_details(job_url)

                company = details["company"] if details["company"] else "ثبت‌نشده"
                location = details["location"] if details["location"] else "دورکاری"

                print(f"Processing: {title} | {company}")

                payload = {
                    "title": title,
                    "company": company,
                    "location": location,
                    "contract_type": details["contract_type"],
                    "date": job_date,  # تاریخ انتشار صحیح اینجا قرار می‌گیرد
                    "job_url": job_url,
                    "company_website": details["company_website"],
                    "phone": details["phone"],
                    "email": details["email"],
                    "category": category_name
                }

                try:
                    webhook_resp = requests.post(WEBHOOK_URL, json=payload, timeout=15)
                    if webhook_resp.status_code == 200:
                        print("-> Sent successfully!")
                        save_seen_job(job_url)
                        seen_jobs.add(job_url)
                except Exception as ex:
                    print(f"Webhook error: {ex}")

                time.sleep(2)

        except Exception as e:
            print(f"Error: {e}")

if __name__ == "__main__":
    main()
