import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; import { ValtechAuthConfig } from '../auth/types'; import { AppRequest, RequestComment, RequestTypeConfig, RequestStatus, CreateRequestPayload, UpdateRequestPayload, TransitionPayload, AddCommentPayload, ListRequestsParams, ListRequestsResponse, ListCommentsResponse, ListRequestTypesResponse, CreateRequestTypePayload, UpdateRequestTypePayload } from './types'; import * as i0 from "@angular/core"; export declare class RequestService { private config; private http; private firestore; constructor(config: ValtechAuthConfig, http: HttpClient); private get baseUrl(); private get typesUrl(); createRequest(payload: CreateRequestPayload): Observable<{ requestId: string; request: AppRequest; }>; createAnonymousRequest(payload: CreateRequestPayload): Observable<{ requestId: string; request: AppRequest; }>; listRequests(params?: ListRequestsParams): Observable; listMyRequests(params?: ListRequestsParams): Observable; getRequest(id: string): Observable; updateRequest(id: string, payload: UpdateRequestPayload): Observable; transition(id: string, payload: TransitionPayload): Observable<{ status: RequestStatus; }>; addComment(requestId: string, payload: AddCommentPayload): Observable; listComments(requestId: string): Observable; /** * Escucha en tiempo real si el usuario ya tiene una request para un animal. * * Usa la subcollección de Firestore del usuario (`users/{uid}/requests`) * filtrando por `metadata.animalId`. Emite `null` si no existe postulación. * * @param uid - UID del usuario autenticado * @param animalId - ID del animal */ watchMyRequestForAnimal(uid: string, animalId: string): Observable; /** * Escucha en tiempo real los comentarios de una request desde Firestore. * * El backend sincroniza DynamoDB → Firestore; el cliente solo lee. * Cuando la subcollection no existe aun (sin comentarios), Firestore emite * un array vacio sin error — comportamiento normal. * * @param appId - AppID de la request * @param orgId - OrgID propietario de la request * @param requestId - ID de la request */ watchComments(appId: string, orgId: string, requestId: string): Observable; listRequestTypes(): Observable; getRequestType(typeId: string): Observable; /** * Lee un tipo de solicitud SIN requerir sesión — la vía para que un * visitante anónimo con un link a una encuesta PUBLIC pueda renderizar el * formulario antes de responder. El backend rechaza cualquier tipo que no * sea `visibility: 'PUBLIC'` (mismo código que "no existe"). Ver ADR-092. */ getPublicRequestType(typeId: string): Observable; createRequestType(payload: CreateRequestTypePayload): Observable; updateRequestType(typeId: string, payload: UpdateRequestTypePayload): Observable; deleteRequestType(typeId: string): Observable; private buildQueryString; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵprov: i0.ɵɵInjectableDeclaration; }