import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:marco/controller/my_controller.dart'; import 'package:marco/helpers/widgets/my_form_validator.dart'; import 'package:marco/helpers/services/api_service.dart'; import 'package:logger/logger.dart'; import 'package:marco/helpers/widgets/my_snackbar.dart'; enum Gender { male, female, other; const Gender(); } final Logger logger = Logger(); class AddEmployeeController extends MyController { List files = []; MyFormValidator basicValidator = MyFormValidator(); Gender? selectedGender; List> roles = []; String? selectedRoleId; final List> countries = [ {"code": "+91", "name": "India"}, {"code": "+1", "name": "USA"}, {"code": "+971", "name": "UAE"}, {"code": "+44", "name": "UK"}, {"code": "+81", "name": "Japan"}, {"code": "+61", "name": "Australia"}, {"code": "+49", "name": "Germany"}, {"code": "+33", "name": "France"}, {"code": "+86", "name": "China"}, ]; final Map minDigitsPerCountry = { "+91": 10, "+1": 10, "+971": 9, "+44": 10, "+81": 10, "+61": 9, "+49": 10, "+33": 9, "+86": 11, }; final Map maxDigitsPerCountry = { "+91": 10, "+1": 10, "+971": 9, "+44": 11, "+81": 10, "+61": 9, "+49": 11, "+33": 9, "+86": 11, }; String selectedCountryCode = "+91"; @override void onInit() { super.onInit(); logger.i("Initializing AddEmployeeController..."); fetchRoles(); basicValidator.addField( 'first_name', label: "First Name", required: true, controller: TextEditingController(), ); basicValidator.addField( 'phone_number', label: "Phone Number", required: true, controller: TextEditingController(), ); basicValidator.addField( 'last_name', label: "Last Name", required: true, controller: TextEditingController(), ); logger.i("Fields initialized for first_name, phone_number, last_name."); } bool showOnline = true; final List categories = []; void onGenderSelected(Gender? gender) { selectedGender = gender; logger.i("Gender selected: ${gender?.name}"); update(); } Future fetchRoles() async { logger.i("Fetching roles..."); final result = await ApiService.getRoles(); if (result != null) { roles = List>.from(result); logger.i("Roles fetched successfully."); update(); } else { logger.e("Failed to fetch roles."); } } void onRoleSelected(String? roleId) { selectedRoleId = roleId; logger.i("Role selected: $roleId"); update(); } Future createEmployees() async { logger.i("Starting employee creation..."); if (selectedGender == null || selectedRoleId == null) { logger.w("Missing gender or role."); showAppSnackbar( title: "Missing Fields", message: "Please select both Gender and Role.", type: SnackbarType.warning, ); return false; } final firstName = basicValidator.getController("first_name")?.text.trim(); final lastName = basicValidator.getController("last_name")?.text.trim(); final phoneNumber = basicValidator.getController("phone_number")?.text.trim(); logger.i( "Creating employee with Name: $firstName $lastName, Phone: $phoneNumber, Gender: ${selectedGender!.name}"); final response = await ApiService.createEmployee( firstName: firstName!, lastName: lastName!, phoneNumber: phoneNumber!, gender: selectedGender!.name, jobRoleId: selectedRoleId!, ); if (response == true) { logger.i("Employee created successfully."); showAppSnackbar( title: "Success", message: "Employee created successfully!", type: SnackbarType.success, ); return true; } else { logger.e("Failed to create employee."); showAppSnackbar( title: "Error", message: "Failed to create employee.", type: SnackbarType.error, ); return false; } } }