import { Injectable, inject } from '@angular/core'; import { HttpClient, HttpParams } from '@angular/common/http'; import { Observable } from 'rxjs'; import { getAppConfig } from './app-config.service'; import { MobileBuildCreatePayload, MobileBuildDefaults, MobileBuildPreflightResult, MobileBuildRequest, ThemeStatus, } from '../interfaces/mobile-build'; @Injectable({ providedIn: 'root', }) export class MobileBuildService { private http = inject(HttpClient); private baseUrl = `${getAppConfig().apiBaseUrl}/api/mobile-builds`; getDefaults(): Observable { return this.http.get(`${this.baseUrl}/defaults`); } listRequests(): Observable { return this.http.get(`${this.baseUrl}/requests`); } getRequest(id: number): Observable { return this.http.get(`${this.baseUrl}/requests/${id}`); } createRequest(payload: MobileBuildCreatePayload): Observable { return this.http.post(`${this.baseUrl}/requests`, payload); } deleteRequest(id: number): Observable { return this.http.delete(`${this.baseUrl}/requests/${id}`); } uploadFile( requestId: number, platform: 'android' | 'ios', fileKind: string, file: File, ): Observable<{ platform: string; file_kind: string; display_name: string; sha256: string; size: number }> { const form = new FormData(); form.append('file', file); const params = new HttpParams() .set('platform', platform) .set('file_kind', fileKind); return this.http.post<{ platform: string; file_kind: string; display_name: string; sha256: string; size: number }>( `${this.baseUrl}/requests/${requestId}/files`, form, { params }, ); } preflight(requestId: number): Observable { return this.http.post( `${this.baseUrl}/requests/${requestId}/preflight`, {}, ); } trigger(requestId: number): Observable { return this.http.post( `${this.baseUrl}/requests/${requestId}/trigger`, {}, ); } getThemeStatus(): Observable { return this.http.get( `${getAppConfig().apiBaseUrl}/api/theme/status`, ); } regenerateTheme(): Observable { return this.http.post( `${getAppConfig().apiBaseUrl}/api/theme/regenerate`, {}, ); } getDownloadUrl(artifactId: number): Observable<{ download_url: string }> { return this.http.get<{ download_url: string }>( `${this.baseUrl}/artifacts/${artifactId}/download-url`, ); } }