import 'package:flutter/material.dart';
import 'package:telemednet/data/models/telemed_user.dart';
import 'package:telemednet/data/services/data_service.dart';
import 'package:telemednet/data/services/patient_registration_service.dart';
import 'package:telemednet/route_names.dart';

class NavigationService {
  static Future<void> handleUserNavigation(BuildContext context) async {
    try {
      final TelemedUser? userProfile = await DataService.getProfile();

      if (userProfile == null) {
        if (context.mounted) {
          Navigator.pushReplacementNamed(context, RouteNames.launch);
        }
        return;
      }

      switch (userProfile.role.toLowerCase()) {
        case 'doctor':
          if (context.mounted) {
            handleDoctorNavigation(context);
          }

          break;
        case 'patient':
          if (context.mounted) {
            handlePatientNavigation(context);
          }

          break;
        default:
          if (context.mounted) {
            Navigator.pushReplacementNamed(context, RouteNames.launch);
          }
      }
    } catch (e) {
      print('Error in handleUserNavigation: $e');
      if (context.mounted) {
        Navigator.pushReplacementNamed(context, RouteNames.launch);
      }
    }
  }

  static Future<void> handleDoctorNavigation(BuildContext context) async {
    if (context.mounted) {
      Navigator.pushReplacementNamed(
        context,
        RouteNames.profileUpload,
      );
    }
  }

  static Future<void> handlePatientNavigation(BuildContext context) async {
    try {
      final patientProfile = await PatientProfileService.getPatientProfile();

      if (context.mounted) {
        if (patientProfile != null) {
          Navigator.pushReplacementNamed(
              context, RouteNames.patientDashboardScreen);
        } else {
          Navigator.pushReplacementNamed(
              context, RouteNames.patientLandingScreen);
        }
      }
    } catch (e) {
      print('Error in handlePatientNavigation: $e');
      if (context.mounted) {
        Navigator.pushReplacementNamed(
            context, RouteNames.patientLandingScreen);
      }
    }
  }
}
