
    ;jC                    H   d dl mZ d dlZd dlZd dlmZ d dlmZ  ee      j                  dz  Z
dZe
fddZddZe
fdd	Ze
fdd
Zedk(  rVd dlZ ej$                  d      Zej)                  dd       ej+                         Z ed eej                                yy)    )annotationsN)Path)Anyzemail_agent.dba)  
CREATE TABLE IF NOT EXISTS prospects_v2 (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  project_id TEXT NOT NULL,
  company TEXT NOT NULL,
  industry TEXT,
  location TEXT,
  website TEXT,
  email TEXT,
  phone TEXT,
  contact_page TEXT,
  company_size TEXT,
  need_signals TEXT,
  fit_rationale TEXT,
  sources_json TEXT NOT NULL,
  research_method TEXT NOT NULL,
  status TEXT NOT NULL DEFAULT 'researched',
  human_gate TEXT NOT NULL DEFAULT 'pending',
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
c                    t        j                  |       5 }|j                  t               |j	                          d d d        y # 1 sw Y   y xY wN)sqlite3connectexecutescriptSCHEMAcommit)db_pathconns     prospect_store_v2.pyinitr       s<    		! T6"  s   &AAc                    g d}|D cg c]  } j                  |      r| }}|rt        d|       t         j                  d      t              r d   st        d      t	         fddD              st        d      y c c}w )N)
project_idcompanysourcesresearch_methodzmissing required fields: r   z sources must be a non-empty listc              3  @   K   | ]  }j                  |        y wr   )get).0kitems     r   	<genexpr>zvalidate.<locals>.<genexpr>-   s     Rqtxx{Rs   )emailphonecontact_pagewebsitez5at least one public business contact path is required)r   
ValueError
isinstancelistany)r   requiredr   missings   `   r   validater&   &   s    FH"6Q$((1+q6G64WI>??dhhy)40Y;<<R$QRRPQQ S 7s
   BBc                   t        |        t        |       t        j                  |      5 }d }| j	                  d      r(|j                  d| d   | d   f      j                         }|r|d   }|j                  d| j	                  d      | j	                  d      | j	                  d      | j	                  d	      | j	                  d
      | j	                  d      t        j                  | j	                  dg       d      | j	                  d      t        j                  | d   d      | d   |f       n|j                  d| d   | d   | j	                  d      | j	                  d      | j	                  d      | j	                  d      | j	                  d	      | j	                  d
      | j	                  d      t        j                  | j	                  dg       d      | j	                  d      t        j                  | d   d      | d   f      }|j                  }|j                          d d d        |S # 1 sw Y   S xY w)Nr   z<SELECT id FROM prospects_v2 WHERE project_id=? AND website=?r   r   a  UPDATE prospects_v2 SET industry=?, location=?, email=?, phone=?,
                   contact_page=?, company_size=?, need_signals=?, fit_rationale=?,
                   sources_json=?, research_method=?, updated_at=CURRENT_TIMESTAMP
                   WHERE id=?industrylocationr   r   r   company_sizeneed_signalsF)ensure_asciifit_rationaler   r   a  INSERT INTO prospects_v2 (
                   project_id,company,industry,location,website,email,phone,contact_page,
                   company_size,need_signals,fit_rationale,sources_json,research_method
                   ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)r   )r&   r   r   r	   r   executefetchonejsondumps	lastrowidr   )r   r   r   existingprospect_idcurs         r   upsertr6   1   s   TNM		! %T88I||Nl#T)_5 hj  "1+KLL!
 HHZ($((:*>@QHHW%txx'?.AYJJtxx;%PHH_-tzz$y/X]/^*+[ ,,;
 &Y*9MtxxXbOcHHY''):DHHW<MtxxXfOgHH^,djj.RT9Udi.jHH_-tzz$y/X]/^*+C --KK%L M%L s   HH99Ic                    t        j                  t        |       j                  d            }t	        |t
              r|n|j                  dg       }d}|D ]  }t        ||       |dz  } |S )Nzutf-8)encoding	prospectsr      )r0   loadsr   	read_textr!   r"   r   r6   )pathr   dataitemscountr   s         r   import_jsonrA   ]   sk    ::d4j**G*<=DtT*Db0IEE tW
 L    __main__z$Import scraper/browser-use prospects)descriptionz--import-jsonT)r$   z	imported=)r   r   returnNone)r   dict[str, Any]rE   rF   )r   rG   r   r   rE   int)r=   strr   r   rE   rH   )
__future__r   r0   r   pathlibr   typingr   __file__parentDB_PATHr   r   r&   r6   rA   __name__argparseArgumentParserparseradd_argument
parse_argsargsprint rB   r   <module>rY      s    "    
x.

"2
2
, ! R 29 )X ,3  z$X$$1WXF
$7D	Ik$"2"234
56 rB   