MIF_E31221222/sigap-website/app/_utils/mock/ews-data.ts

75 lines
3.0 KiB
TypeScript

import { IIncidentLog } from "../types/ews";
// Jember area coordinates
const JEMBER_LOCATIONS = [
{ latitude: -8.172380, longitude: 113.702588, district: "Kaliwates", address: "Jl. Gajah Mada No. 233, Kaliwates" },
{ latitude: -8.184859, longitude: 113.668811, district: "Sumbersari", address: "Jl. Kalimantan No.37, Sumbersari" },
{ latitude: -8.166498, longitude: 113.722759, district: "Patrang", address: "Jl. Mastrip No. 49, Patrang" },
{ latitude: -8.159021, longitude: 113.713175, district: "Jemberlor", address: "Jl. Letjen Panjaitan No. 55, Jemberlor" },
{ latitude: -8.192226, longitude: 113.669716, district: "Kebonsari", address: "Perumahan Kebonsari Indah, Blok C-15" },
];
// Generate mock incident log
export const generateMockIncident = (override: Partial<IIncidentLog> = {}): IIncidentLog => {
const locationIndex = Math.floor(Math.random() * JEMBER_LOCATIONS.length);
const location = JEMBER_LOCATIONS[locationIndex];
const priorityOptions = ['high', 'medium', 'low'] as const;
const priority = override.priority || priorityOptions[Math.floor(Math.random() * priorityOptions.length)];
const reporters = [
{ id: "USR001", name: "Budi Santoso", phone: "081234567890" },
{ id: "USR002", name: "Dewi Putri", phone: "085678901234" },
{ id: "USR003", name: "Ahmad Rizki", phone: "087890123456" },
{ id: "USR004", name: "Siti Nurhaliza", phone: "089012345678" }
];
const reporterIndex = Math.floor(Math.random() * reporters.length);
return {
id: override.id || `INC${Math.floor(Math.random() * 10000).toString().padStart(4, '0')}`,
timestamp: override.timestamp || new Date(),
location: override.location || {
latitude: location.latitude + (Math.random() * 0.01 - 0.005),
longitude: location.longitude + (Math.random() * 0.01 - 0.005),
address: location.address,
district: location.district
},
status: override.status || 'active',
reporter: override.reporter || reporters[reporterIndex],
description: override.description || "Panic button activated",
category: override.category || "Emergency Alert",
priority,
response_time: override.response_time,
};
};
// List of mock incidents (initially empty)
export const mockIncidents: IIncidentLog[] = [];
// Add a new incident to the mock data
export const addMockIncident = (incident: Partial<IIncidentLog> = {}): IIncidentLog => {
const newIncident = generateMockIncident(incident);
mockIncidents.push(newIncident);
return newIncident;
};
// Get all incidents
export const getAllIncidents = (): IIncidentLog[] => {
return [...mockIncidents];
};
// Get active incidents
export const getActiveIncidents = (): IIncidentLog[] => {
return mockIncidents.filter(incident => incident.status === 'active');
};
// Resolve an incident
export const resolveIncident = (id: string): IIncidentLog | undefined => {
const incident = mockIncidents.find(inc => inc.id === id);
if (incident) {
incident.status = 'resolved';
incident.response_time = Math.floor(Math.random() * 300) + 60; // 1-5 minutes response time
}
return incident;
};