import 'package:get/get.dart';
import 'package:on_field_work/helpers/services/app_logger.dart';
import 'package:on_field_work/helpers/services/api_service.dart';
import 'package:on_field_work/model/attendance/organization_per_project_list_model.dart';

class OrganizationController extends GetxController {
  /// List of organizations assigned to the selected project
  List<Organization> organizations = [];

  /// Currently selected organization (reactive)
  Rxn<Organization> selectedOrganization = Rxn<Organization>();

  /// Loading state for fetching organizations
  final isLoadingOrganizations = false.obs;

  /// Fetch organizations assigned to a given project
  Future<void> fetchOrganizations(String projectId) async {
    try {
      isLoadingOrganizations.value = true;

      final response = await ApiService.getAssignedOrganizations(projectId);
      if (response != null && response.data.isNotEmpty) {
        organizations = response.data;
        logSafe("Organizations fetched: ${organizations.length}");
      } else {
        organizations = [];
        logSafe("No organizations found for project $projectId",
            level: LogLevel.warning);
      }
    } catch (e, stackTrace) {
      logSafe("Failed to fetch organizations: $e",
          level: LogLevel.error, error: e, stackTrace: stackTrace);
      organizations = [];
    } finally {
      isLoadingOrganizations.value = false;
    }
  }

  /// Select an organization
  void selectOrganization(Organization? org) {
    selectedOrganization.value = org;
  }

  /// Clear the selection (set to "All Organizations")
  void clearSelection() {
    selectedOrganization.value = null;
  }

  /// Current selection name for UI
  String get currentSelection =>
      selectedOrganization.value?.name ?? "All Organizations";
}
