import { defaultBaseStateData, EntityState, EntityStore } from '@/core/state';
import { LayoutService } from '@/layout/service/layout.service';
import { inject, Injectable } from '@angular/core';
import { catchError, finalize } from 'rxjs';
import { IConsumerInfoResponse } from '../models';
import { consumerProfileNamedRoutes } from '../modules/profile/constants';
import { ConsumerService } from '../services/main.service';

interface ConsumerState extends EntityState<IConsumerInfoResponse> {}

@Injectable({
  providedIn: 'root',
})
export class ConsumerStore extends EntityStore<IConsumerInfoResponse, ConsumerState> {
  private readonly service = inject(ConsumerService);
  private readonly layoutService = inject(LayoutService);

  constructor() {
    super({
      ...defaultBaseStateData,
    });
  }

  getData() {
    this.patchState({ loading: true });
    this.service
      .getInfo()
      .pipe(
        finalize(() => {
          this.patchState({ loading: false });
        }),
        catchError((error) => {
          this.setError(error);
          throw error;
        }),
      )
      .subscribe((entity) => {
        this.layoutService.setPanelInfo({
          title: 'پنل مدیریت صورت‌حساب‌های مالیاتی',
        });
        this.layoutService.setProfilePageRoute(
          consumerProfileNamedRoutes.profile.meta!.pagePath!(),
        );
        this.patchState({ entity });
      });
  }

  override reset(): void {
    this.setState({
      ...defaultBaseStateData,
    });
  }
}
