import 'package:krow_domain/krow_domain.dart';

/// Interface for managing personal information of staff members.
///
/// This repository defines the contract for loading and updating
/// staff profile information during onboarding or profile editing.
/// 
/// Implementations must delegate all data operations through
/// the data_connect layer, following Clean Architecture principles.
abstract interface class PersonalInfoRepositoryInterface {
  /// Retrieves the staff profile for the current authenticated user.
  ///
  /// Returns the complete [Staff] entity with all profile information.
  Future<Staff> getStaffProfile();

  /// Updates the staff profile information.
  ///
  /// Takes a [Staff] entity ID and updated fields map and persists changes
  /// through the data layer. Returns the updated [Staff] entity.
  Future<Staff> updateStaffProfile({required String staffId, required Map<String, dynamic> data});

  /// Uploads a profile photo and returns the URL.
  ///
  /// Takes the file path of the photo to upload.
  /// Returns the URL where the photo is stored.
  Future<String> uploadProfilePhoto(String filePath);
}
