#!/usr/bin/env python3
"""
使用 Playwright 的自动化招标爬虫
"""
from playwright.sync_api import sync_playwright
from datetime import datetime
import smtplib
from email.mime.text import MIMEText

KEYWORDS = ['solar', 'fotovoltaico', 'cargador', 'medidor', 'transformador', 
            'ctpt', 'recloser', 'led', 'medidor de agua', 'acueduct', 'batería', 'battery']

TODAY = datetime.now().strftime('%Y-%m-%d')

def scrape_tenders(keyword):
    """使用 Playwright 爬取招标"""
    tenders = []
    
    try:
        with sync_playwright() as p:
            browser = p.chromium.launch(headless=True, executable_path='/Applications/Chromium.app/Contents/MacOS/Chromium')
            page = browser.new_page()
            
            # 打开页面
            page.goto('https://comunidad.comprasdominicana.gob.do/Public/Tendering/ContractNoticeManagement/Index')
            page.wait_for_load_state('networkidle')
            
            # 搜索
            page.fill('input[type="search"]', keyword)
            page.click('button[type="submit"]')
            page.wait_for_load_state('networkidle')
            page.wait_for_timeout(3000)
            
            # 提取数据
            rows = page.query_selector_all('table tbody tr')
            
            for row in rows:
                cells = row.query_selector_all('td')
                if len(cells) >= 6:
                    publish_date = cells[3].inner_text() if len(cells) > 3 else ""
                    
                    # 只获取今天的
                    if TODAY.replace('-', '/') in publish_date or TODAY in publish_date:
                        tender = {
                            'authority': cells[0].inner_text().strip(),
                            'reference': cells[1].inner_text().strip(),
                            'description': cells[2].inner_text().strip(),
                            'publish_date': publish_date,
                            'deadline': cells[4].inner_text().strip() if len(cells) > 4 else "",
                            'price': cells[5].inner_text().strip() if len(cells) > 5 else "",
                            'status': cells[6].inner_text().strip() if len(cells) > 6 else "",
                            'keyword': keyword
                        }
                        tenders.append(tender)
            
            browser.close()
            
    except Exception as e:
        print(f"Error: {e}")
    
    return tenders

def send_email(tenders):
    """发送邮件"""
    body = f"""📋 招标检索结果 ({TODAY})

关键词：{', '.join(KEYWORDS)}

"""
    
    if tenders:
        body += f"找到 {len(tenders)} 条相关招标：\n\n"
        for t in tenders:
            body += f"""【{t['reference']}】- 关键词: {t['keyword']}
机构：{t['authority']}
项目：{t['description'][:100]}...
金额：{t['price']}
状态：{t['status']}
截止：{t['deadline']}
---
"""
    else:
        body += "结论：今日无符合关键词的新招标\n"

    body += """
---
数据来源：https://comunidad.comprasdominicana.gob.do
自动生成
"""

    msg = MIMEText(body, 'plain', 'utf-8')
    msg['Subject'] = f"招标检索结果 - {TODAY}"
    msg['From'] = 'fengxia569@163.com'
    msg['To'] = 'feng.xia@hxgroup.com'

    server = smtplib.SSL('smtp.163.com', 465)
    server.login('fengxia569@163.com', 'ZZ38a32nQEwTe2Wn')
    server.send_message(msg, 'fengxia569@163.com', ['feng.xia@hxgroup.com', 'evelyn@hxgroup.com'])
    server.quit()

def main():
    print(f"=== 开始自动招标检索 ({TODAY}) ===")
    
    all_tenders = []
    
    for keyword in KEYWORDS:
        print(f"搜索: {keyword}")
        tenders = scrape_tenders(keyword)
        all_tenders.extend(tenders)
        print(f"  找到 {len(tenders)} 条")
    
    # 去重
    seen = set()
    unique = []
    for t in all_tenders:
        if t['reference'] not in seen:
            seen.add(t['reference'])
            unique.append(t)
    
    send_email(unique)
    print(f"=== 完成，发送 {len(unique)} 条 ===")

if __name__ == '__main__':
    main()
