package com.taf.attendance import android.app.DatePickerDialog import android.os.Bundle import android.widget.ArrayAdapter import android.widget.Toast import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.taf.attendance.data.AttendanceRepository import com.taf.attendance.databinding.ActivityLeaveBinding import com.taf.attendance.model.LeaveRequest import com.taf.attendance.model.LeaveType import kotlinx.coroutines.launch import java.text.SimpleDateFormat import java.util.* class LeaveActivity : AppCompatActivity() { private lateinit var binding: ActivityLeaveBinding private lateinit var repo: AttendanceRepository private lateinit var leaveAdapter: LeaveRequestAdapter private var leaveTypes: List = emptyList() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityLeaveBinding.inflate(layoutInflater) setContentView(binding.root) repo = AttendanceRepository(this) setupRecyclerView() setupDatePickers() setupButtons() loadLeaveRequests() loadLeaveTypes() } private fun setupRecyclerView() { leaveAdapter = LeaveRequestAdapter() binding.recyclerViewLeaveRequests.apply { layoutManager = LinearLayoutManager(this@LeaveActivity) adapter = leaveAdapter } } private fun setupDatePickers() { val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()) val calendar = Calendar.getInstance() binding.editTextStartDate.setOnClickListener { DatePickerDialog( this, { _, year, month, day -> calendar.set(year, month, day) binding.editTextStartDate.setText(dateFormat.format(calendar.time)) }, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH) ).show() } binding.editTextEndDate.setOnClickListener { DatePickerDialog( this, { _, year, month, day -> calendar.set(year, month, day) binding.editTextEndDate.setText(dateFormat.format(calendar.time)) }, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH) ).show() } } private fun setupLeaveTypeSpinner() { lifecycleScope.launch { try { leaveTypes = repo.getLeaveTypes() val adapter = ArrayAdapter( this@LeaveActivity, android.R.layout.simple_spinner_item, leaveTypes.map { it.name } ) adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) binding.spinnerLeaveType.adapter = adapter } catch (e: Exception) { Toast.makeText(this@LeaveActivity, "Failed to load leave types", Toast.LENGTH_SHORT).show() } } } private fun setupButtons() { binding.buttonSubmitLeave.setOnClickListener { submitLeaveRequest() } binding.buttonRefresh.setOnClickListener { loadLeaveRequests() } } private fun loadLeaveRequests() { lifecycleScope.launch { try { val requests = repo.getLeaveRequests() leaveAdapter.submitList(requests) } catch (e: Exception) { Toast.makeText(this@LeaveActivity, "Failed to load leave requests", Toast.LENGTH_SHORT).show() } } } private fun loadLeaveTypes() { lifecycleScope.launch { try { leaveTypes = repo.getLeaveTypes() setupLeaveTypeSpinner() } catch (e: Exception) { // Handle error silently } } } private fun submitLeaveRequest() { val leaveTypeIndex = binding.spinnerLeaveType.selectedItemPosition val startDate = binding.editTextStartDate.text.toString() val endDate = binding.editTextEndDate.text.toString() val reason = binding.editTextReason.text.toString() if (leaveTypeIndex < 0 || leaveTypes.isEmpty()) { Toast.makeText(this, "Please select a leave type", Toast.LENGTH_SHORT).show() return } if (startDate.isEmpty() || endDate.isEmpty()) { Toast.makeText(this, "Please select start and end dates", Toast.LENGTH_SHORT).show() return } val leaveType = leaveTypes[leaveTypeIndex].name lifecycleScope.launch { try { val success = repo.submitLeaveRequest(leaveType, startDate, endDate, reason) if (success) { Toast.makeText(this@LeaveActivity, "Leave request submitted successfully", Toast.LENGTH_SHORT).show() clearForm() loadLeaveRequests() } else { Toast.makeText(this@LeaveActivity, "Failed to submit leave request", Toast.LENGTH_SHORT).show() } } catch (e: Exception) { Toast.makeText(this@LeaveActivity, "Error: ${e.message}", Toast.LENGTH_SHORT).show() } } } private fun clearForm() { binding.spinnerLeaveType.setSelection(0) binding.editTextStartDate.text.clear() binding.editTextEndDate.text.clear() binding.editTextReason.text.clear() } }