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; @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; } } }