import {inject, Injectable} from '@angular/core'; import {HttpClient} from '@angular/common/http'; import {Observable} from 'rxjs'; import {environment} from '../../environments/environment'; export interface EligibleCommunity { id: string; name: string; type: string; edaEcId: string; } export interface MembershipRequest { meteringPointId: string; energyCommunityId: string; priorityLevel: number; } export interface MembershipResponse { id: string; meteringPointId: string; atNumber: string; energyCommunityId: string; communityName: string; priorityLevel: number; status: string; validFrom: string | null; validTo: string | null; } export interface PendingMembershipResponse { id: string; userEmail: string; firstName: string; lastName: string; atNumber: string; communityName: string; priorityLevel: number; status: string; } @Injectable({providedIn: 'root'}) export class MembershipService { private http = inject(HttpClient); private apiUrl = `${environment.apiUrl}/api/community`; getEligibleCommunities(meteringPointId: string): Observable { return this.http.get(`${this.apiUrl}/metering-points/${meteringPointId}/eligible-communities`); } requestMembership(request: MembershipRequest): Observable { return this.http.post(`${this.apiUrl}/memberships/request`, request); } getOwnMemberships(): Observable { return this.http.get(`${this.apiUrl}/memberships/me`); } getPendingMemberships(): Observable { return this.http.get(`${this.apiUrl}/admin/memberships/pending`); } approveMembership(id: string): Observable { return this.http.put(`${this.apiUrl}/admin/memberships/${id}/approve`, {}); } rejectMembership(id: string): Observable { return this.http.put(`${this.apiUrl}/admin/memberships/${id}/reject`, {}); } }