* mock_anaf_verificare.prg - inlocuieste FUNCTION ANAF_VerificaCuiSingle (validare.prg) cu raspunsuri
* preconfigurate, ca testul UI sa NU faca apeluri reale la serviciul ANAF (lent/nedeterminist).
* Se incarca cu SET PROCEDURE ... ADDITIVE INAINTEA lui test_init_env_auto (care incarca validare.prg
* real) - la nume duplicat de FUNCTION, VFP foloseste fisierul cautat PRIMUL (verificat empiric,
* vezi COMUN\docs\testare-ui-vfp.md capcana g). NormalizeazaCUI (validare.prg) NU e suprascrisa -
* se foloseste cea reala.
* IMPORTANT: goANAFMockData (Collection cu raspunsuri, cheie 'C'+cui normalizat) si gnANAFCallCount
* (contor apeluri reale, nu din cache) se construiesc INLINE in programul principal al testului,
* NU aici si NU intr-o PROCEDURE - vezi capcana l din depanare_testare_vfp.md (CREATEOBJECT/
* ADDPROPERTY apelate dintr-o PROCEDURA se comporta gresit in acest runtime headless; SET PROCEDURE
* nici nu executa codul de top-level al acestui fisier, doar inregistreaza FUNCTION-ul de mai jos).
* Contor apeluri: gnANAFCallCount creste doar cand mock-ul e efectiv apelat (ANAF_StarePartener
* verifica intai goCacheANAF_Sesiune - cache-hit NU ajunge aici).
* runda 12: tdData (data documentului, trimisa de ANAF_StarePartener) e retinuta in gdANAFUltimaData,
* ca testul sa poata verifica ca data ajunge efectiv la wrapper.
* T7/lane E (handoff_anaf_404.md): al 4-lea parametru tcClasaEsec, prin referinta, identic cu wrapper-ul
* real ('' / 'FARA_RASPUNS' / 'RASPUNS_NEINTELES'). Simulare clasa de esec: daca valoarea din
* goANAFMockData pentru o cheie e STRING (nu obiect), e tratata ca nume de clasa de esec - mock-ul
* intoarce .NULL. cu tcClasaEsec = acea valoare, fara sa atinga tlNegasit (ramane .F., ca la wrapper-ul
* real pe caile FARA_RASPUNS/RASPUNS_NEINTELES). Restul (CUI neconfigurat = "cod inexistent" simulat) e
* neschimbat.
FUNCTION ANAF_VerificaCuiSingle
	LPARAMETERS tcCui, tdData, tlNegasit, tcClasaEsec
	LOCAL lcCui, lcKey, luItem
	tlNegasit = .F.
	tcClasaEsec = ''
	IF TYPE('goANAFMockData') <> 'O'
		RETURN .NULL.
	ENDIF
	IF TYPE('gnANAFCallCount') = 'N'
		gnANAFCallCount = gnANAFCallCount + 1
	ENDIF
	IF VARTYPE(m.tdData) = 'D'
		gdANAFUltimaData = m.tdData
	ENDIF
	lcCui = NormalizeazaCUI(m.tcCui)
	lcKey = 'C' + m.lcCui
	IF goANAFMockData.GetKey(m.lcKey) = 0
		tlNegasit = .T.	&& CUI neconfigurat - simuleaza raspunsul ANAF "cod inexistent"
		RETURN .NULL.
	ENDIF
	luItem = goANAFMockData.Item(m.lcKey)
	IF VARTYPE(m.luItem) = 'C'
		tcClasaEsec = m.luItem	&& simuleaza esecul wrapper-ului (FARA_RASPUNS / RASPUNS_NEINTELES)
		RETURN .NULL.
	ENDIF
	RETURN m.luItem
ENDFUNC

* T7/lane E, dupa T5/sonda (handoff_anaf_404.md): mock peste sonda asincrona de disponibilitate
* (ANAF_SondaPorneste/AuSositRaspunsul/AReusit/Opreste, validare.prg) - fara mock, Activeaza()
* ar face un apel HTTP real (winHTTP async) la fiecare test cu starea NECUNOSCUT. Globalele de
* control (gcMockSondaModo, glMockSondaActiva, gnMockSondaPornireCount, glMockSondaGataManual,
* glMockSondaReusitaManual) se construiesc INLINE in programul principal (acelasi motiv ca mai sus).
* Mod 'AUTO' (implicit): sonda "raspunde" instant cu succes la primul ANAF_SondaVerifica() - transparent
* pentru scenariile care nu testeaza explicit sonda. Mod 'MANUAL': testul controleaza explicit daca/cand
* "a sosit raspunsul" (glMockSondaGataManual) si cu ce rezultat (glMockSondaReusitaManual) - foloseste
* pentru S2 (sonda in aer)/S3 (sonda reuseste)/S4 (sonda expira).
FUNCTION ANAF_SondaPorneste
	IF TYPE('gnMockSondaPornireCount') = 'N'
		gnMockSondaPornireCount = gnMockSondaPornireCount + 1
	ENDIF
	glMockSondaActiva = .T.
	RETURN .T.
ENDFUNC

FUNCTION ANAF_SondaAuSositRaspunsul
	IF TYPE('glMockSondaActiva') <> 'L' OR !glMockSondaActiva
		RETURN .T.
	ENDIF
	IF TYPE('gcMockSondaModo') = 'C' AND gcMockSondaModo == 'MANUAL'
		RETURN glMockSondaGataManual
	ENDIF
	RETURN .T.	&& AUTO: raspunde imediat
ENDFUNC

FUNCTION ANAF_SondaAReusit
	IF TYPE('gcMockSondaModo') = 'C' AND gcMockSondaModo == 'MANUAL'
		RETURN glMockSondaReusitaManual
	ENDIF
	RETURN .T.	&& AUTO: succes implicit
ENDFUNC

FUNCTION ANAF_SondaOpreste
	LOCAL llOprita
	llOprita = (TYPE('glMockSondaActiva') = 'L' AND glMockSondaActiva)
	glMockSondaActiva = .F.
	RETURN m.llOprita
ENDFUNC
