o
    i                     @  sx   d dl mZ d dlZd dlmZ ddlmZmZmZm	Z	m
Z
mZmZ ddd	ZdddZdddZedkr:e  dS dS )    )annotationsN)Path   )ChecklistServiceExtractionServiceIntakeServiceOccupationServiceReportServiceTimelineServiceVerificationServicereturnargparse.ArgumentParserc                  C  s0  t jddd} | jdd dd | jddd	}|jd
dd}|jddd |jddd d |jddd |jddd |jddd dD ]\}}|j||d}|jddd |jddd d qC|jddd}|jddd |jddd d |jdddd |jddg d d! |jd"dd#d |jd$d%d&d'd( | S ))Nzmigration-evidence-builderz,CLI-first migration evidence processing app.)progdescriptionz--storage-rootzLOverride default storage root (defaults to flask_server/storage/applicants).)defaulthelpcommandT)destrequiredinit-applicantz!Create applicant folder scaffold.)r   applicant_id?)nargsz--applicantapplicant_opt)r   r   z--full-name )r   z--sponsor-namez--nominated-occupation))scan-intakez%Scan intake/* and register documents.)process-documentsz:Process all scanned documents once into canonical outputs.)build-timelinez#Generate applicant timeline output.)analyze-occupationsz,Generate occupation support analysis output.)generate-cvzGenerate draft CV output.)generate-gap-reportz$Generate timeline gap report output.)generate-chatgpt-packz&Generate ChatGPT briefing pack output.)generate-checklistz#Generate evidence checklist output.confirm-documentz7Confirm a processed document after manual verification.z--document-pathzWRelative path under applicant root, e.g. identity/passport/2026-04-13_passport-bio-page)r   r   z--fieldappendz`Field path in document.json to confirm. Repeatable. Example: --field identifiers.passport_number)actionr   r   z--notezManual reviewer note.z--byconfirmed_bymanual_reviewerzReviewer identifier.)r   r   r   )argparseArgumentParseradd_argumentadd_subparsers
add_parser)parsersubinit_cmdname	help_textcmdconfirm_cmd r4   H/var/www/html/flask_server/apps/migration_evidence_builder/cli/runner.pybuild_parser   sJ   
r6   argsargparse.Namespacer-   strc                 C  s2   t | dd pt | dd }|s|d t| S )Nr   r   zHMissing applicant_id. Use positional <applicant_id> or --applicant <id>.)getattrerrorr9   strip)r7   r-   r   r4   r4   r5   _resolve_applicant_idG   s   
r=   Nonec               	   C  s  t  } |  }|jrt|jnd }t|d}t|| }|jdkr5|j||j|j	|j
d}td|  d S ||}|jdkrg||}tdt|  |D ]}td|d  d	|d
  d|d   qOd S |jdkrt }	g }
||D ]
}|
|	| qvtdt|
  |
D ]}td|d  d	|d
  d qd S |jdkrt |}tdt|dg  d d S |jdkrt |}td tdd|dg pd  d S |jdkrt |}td|  d S |jdkrt |}td|  d S |jdkrt |}td|  d S |jd kr6t |}td!t|d"g  d# d S |jd$krjt j ||j!|j"|j#|j$d%}td&|d'   td(|d)   td*t|d+   d S | %d,|j  d S )-N)storage_rootr   )r   	full_namesponsor_namenominated_occupationzApplicant initialized: r   zDocuments scanned: z- doc_idz [categoryz] -> stored_originalr   zDocuments processed: ]r   zTimeline generated with eventsz eventsr   zOccupation analysis generatedzDetected keywords: z, detected_keywordsnoner   zCV generated: r    zGap report generated: r!   zChatGPT pack generated: r"   zChecklist generated with itemsz itemsr#   )applicant_basedocument_pathverified_fieldsnoter&   zDocument confirmed: rL   zStatus: statuszFields confirmed: confirmed_fieldszUnknown command: )&r6   
parse_argsr?   r   r   r=   r   init_applicantr@   rA   rB   printapplicant_pathscan_intakelenr   list_document_manifestsr$   process_documentr
   build_timelinegetr   analyzejoinr	   generate_cvgenerate_gap_reportgenerate_chatgpt_packr   generater   confirm_documentrL   fieldrN   r&   r;   )r-   r7   r?   intake_servicer   pathrK   	manifestsitem	extractor	processedmanifest_pathrowoutputresultr4   r4   r5   mainN   s   





(
 

 
rm   __main__)r   r   )r7   r8   r-   r   r   r9   )r   r>   )
__future__r   r(   pathlibr   servicesr   r   r   r   r	   r
   r   r6   r=   rm   __name__r4   r4   r4   r5   <module>   s    $

6
T
