import type { Logger } from '@core/shared/domain/Logger';
import { Result } from '@core/shared/domain/Result';
import { BrowserAuthenticationState } from '../../domain/value-objects/BrowserAuthenticationState';
import type { AuthenticationServicePort } from '../ports/AuthenticationServicePort';

/**
 * Use case for verifying browser shows authenticated page state.
 * Combines cookie validation with page content verification.
 */
export class VerifyAuthenticatedPageUseCase {
  constructor(
    private readonly authService: AuthenticationServicePort,
    private readonly logger: Logger,
  ) {}
  
  async execute(): Promise<Result<BrowserAuthenticationState>> {
    this.logger.debug('Executing VerifyAuthenticatedPageUseCase');
    try {
      const result = await this.authService.verifyPageAuthentication();
      
      if (result.isErr()) {
        const error = result.error ?? new Error('Page verification failed');
        this.logger.error(`Page verification failed: ${error.message}`, error);
        return Result.err<BrowserAuthenticationState>(error);
      }
      
      const browserState = result.unwrap();
      this.logger.info('Successfully verified authenticated page state.');
      return Result.ok<BrowserAuthenticationState>(browserState);
    } catch (error) {
      const message = error instanceof Error ? error.message : String(error);
      this.logger.error(`Page verification failed unexpectedly: ${message}`, error instanceof Error ? error : undefined);
      return Result.err<BrowserAuthenticationState>(new Error(`Page verification failed: ${message}`));
    }
  }
}