You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Seekers/Views/IncidentReportPage.xaml.cs

109 lines
3.8 KiB

using ChildGuard.Services;
using Justice.Helpers;
using Justice.Models;
using System;
namespace Justice.Views
{
public partial class IncidentReportPage : ContentPage
{
private readonly DatabaseHelper _databaseHelper;
private readonly EmailService _emailService;
public IncidentReportPage()
{
InitializeComponent();
_databaseHelper = new DatabaseHelper();
_emailService = new EmailService();
}
protected override async void OnAppearing()
{
base.OnAppearing();
await FetchLocationAsync();
}
private async Task FetchLocationAsync()
{
try
{
var (latitude, longitude, address) = await GeolocationHelper.GetLocationAsync();
LocationEntry.Text = address;
}
catch (Exception ex)
{
LocationEntry.Text = "Unable to fetch location.";
Console.WriteLine($"Error fetching location: {ex.Message}");
}
}
private async void OnSubmitReportClicked(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(ReporterNameEntry.Text) ||
IncidentTypePicker.SelectedItem == null ||
string.IsNullOrWhiteSpace(DescriptionEditor.Text))
{
await DisplayAlert("Error", "Please fill in all required fields.", "OK");
return;
}
var (latitude, longitude, address) = await GeolocationHelper.GetLocationAsync();
var report = new IncidentReport
{
ReporterName = ReporterNameEntry.Text.Trim(),
IncidentType = IncidentTypePicker.SelectedItem.ToString(),
Description = DescriptionEditor.Text.Trim(),
Latitude = latitude,
Longitude = longitude,
Address = address,
DateTime = DateTime.Now,
AttachmentPath = null // Optional
};
try
{
// Save to database
await _databaseHelper.InsertAsync(report);
// Get recipient email based on incident type
string recipientEmail = _emailService.GetRecipientEmail(report.IncidentType);
// Prepare email content
string emailBody = $"Incident Report:\n\n" +
$"Name: {report.ReporterName}\n" +
$"Type: {report.IncidentType}\n" +
$"Description: {report.Description}\n" +
$"Latitude: {report.Latitude}\n" +
$"Longitude: {report.Longitude}\n" +
$"Location: {report.Address}\n" +
$"Date/Time: {report.DateTime}";
// Send email
bool emailSent = await _emailService.SendEmailAsync(recipientEmail, "Incident Report", emailBody);
if (emailSent)
{
await DisplayAlert("Success", "Incident report submitted and email alert sent.", "OK");
}
else
{
await DisplayAlert("Error", "Failed to send email alert.", "OK");
}
}
catch (Exception ex)
{
await DisplayAlert("Error", $"Failed to submit report: {ex.Message}", "OK");
}
}
private async void OnChooseFileClicked(object sender, EventArgs e)
{
var result = await FilePicker.PickAsync();
if (result != null)
{
await DisplayAlert("File Selected", $"File: {result.FileName}", "OK");
}
}
}
}