import { DOCUMENT } from '@angular/common';
import { Injectable, inject } from '@angular/core';
import { take } from 'rxjs/operators';
import { ConfigService } from '../../core/config/config.service';
import { BrandingConfig } from '../../shared/models/config';

@Injectable({ providedIn: 'root' })
export class BrandingEngineService {
  private readonly document = inject(DOCUMENT);
  private readonly configService = inject(ConfigService);

  initialize(): void {
    this.configService.loadBootstrap().pipe(take(1)).subscribe({
      next: (bootstrap) => this.applyBranding(bootstrap.branding),
      error: () => {
        // Branding bootstrapping should not break app startup.
      }
    });
  }

  applyBranding(branding: BrandingConfig): void {
    const root = this.document.documentElement;
    root.style.setProperty('--brand-logo-url', `url('${branding.logoUrl}')`);
    root.style.setProperty('--brand-logo-compact-url', `url('${branding.logoCompactUrl ?? branding.logoUrl}')`);

    const existing = this.document.querySelector("link[rel='icon']") as HTMLLinkElement | null;
    if (existing) {
      existing.href = branding.faviconUrl;
    } else {
      const link = this.document.createElement('link');
      link.rel = 'icon';
      link.href = branding.faviconUrl;
      this.document.head.appendChild(link);
    }
  }
}
