// Veri yönetimi için localStorage tabanlı store import { newsData, type NewsItem } from '@/data/news'; import { mediaData, type MediaItem } from '@/data/media'; import { documentsData, type Document } from '@/data/documents'; import { metroStations, type MetroStation } from '@/data/metroStations'; export interface SliderItem { id: number; title: string; description: string; buttonText: string; buttonLink: string; active: boolean; } // Default slider data export const defaultSliderData: SliderItem[] = [ { id: 1, title: 'Ankara Metro Altyapı Projelerinde Öncü Çözümler', description: 'Ankara Büyükşehir Belediyesi ile birlikte, modern teknoloji ve mühendislik uzmanlığımızla başkentin ulaşım ağını inşa ediyor, geleceğin metro sistemlerini bugünden hayata geçiriyoruz.', buttonText: 'Detayları Gör', buttonLink: '#proje-detay', active: true }, { id: 2, title: 'A2 Metro Hattı İnşaatında Son Aşamaya Gelindi', description: '15 istasyonlu A2 Metro Hattı projemiz %75 tamamlandı. 2026 yılında hizmete açılacak modern metro hattımız, günlük 300 bin yolcuya hizmet verecek.', buttonText: 'İlerlemeyi İzle', buttonLink: '#metro-hatti', active: true }, { id: 3, title: 'Çevre Dostu Metro Teknolojileri', description: 'Yenilenebilir enerji kaynakları ve sürdürülebilir inşaat teknikleri ile çevre dostu metro projelerine imza atıyoruz. Karbon emisyonunu %40 azaltan yenilikçi çözümlerimiz.', buttonText: 'Yeşil Projeler', buttonLink: '#cevre', active: true }, { id: 4, title: 'Güvenli İnşaat, Güvenli Gelecek', description: 'ISO 45001 sertifikalı iş güvenliği sistemlerimiz ile 2000+ çalışanımızın güvenliğini en üst düzeyde tutuyoruz. Sıfır iş kazası hedefiyle çalışıyoruz.', buttonText: 'Güvenlik Önlemleri', buttonLink: '#guvenlik', active: true } ]; // LocalStorage keys const KEYS = { SLIDER: 'a2metro_slider', NEWS: 'a2metro_news', MEDIA: 'a2metro_media', DOCUMENTS: 'a2metro_documents', METRO_STATIONS: 'a2metro_stations', }; // Helper functions const isBrowser = typeof window !== 'undefined'; export const dataStore = { // Slider getSlider: (): SliderItem[] => { if (!isBrowser) return defaultSliderData; const stored = localStorage.getItem(KEYS.SLIDER); return stored ? JSON.parse(stored) : defaultSliderData; }, setSlider: (data: SliderItem[]) => { if (isBrowser) { localStorage.setItem(KEYS.SLIDER, JSON.stringify(data)); } }, // News getNews: (): NewsItem[] => { if (!isBrowser) return newsData; const stored = localStorage.getItem(KEYS.NEWS); return stored ? JSON.parse(stored) : newsData; }, setNews: (data: NewsItem[]) => { if (isBrowser) { localStorage.setItem(KEYS.NEWS, JSON.stringify(data)); } }, addNews: (newsItem: Omit) => { const current = dataStore.getNews(); const newItem = { ...newsItem, id: Date.now() }; dataStore.setNews([newItem, ...current]); return newItem; }, updateNews: (id: number, newsItem: Partial) => { const current = dataStore.getNews(); const updated = current.map((item) => item.id === id ? { ...item, ...newsItem } : item ); dataStore.setNews(updated); }, deleteNews: (id: number) => { const current = dataStore.getNews(); const filtered = current.filter((item) => item.id !== id); dataStore.setNews(filtered); }, // Media getMedia: (): MediaItem[] => { if (!isBrowser) return mediaData; const stored = localStorage.getItem(KEYS.MEDIA); return stored ? JSON.parse(stored) : mediaData; }, setMedia: (data: MediaItem[]) => { if (isBrowser) { localStorage.setItem(KEYS.MEDIA, JSON.stringify(data)); } }, addMedia: (mediaItem: Omit) => { const current = dataStore.getMedia(); const newItem = { ...mediaItem, id: Date.now() }; dataStore.setMedia([newItem, ...current]); return newItem; }, updateMedia: (id: number, mediaItem: Partial) => { const current = dataStore.getMedia(); const updated = current.map((item) => item.id === id ? { ...item, ...mediaItem } : item ); dataStore.setMedia(updated); }, deleteMedia: (id: number) => { const current = dataStore.getMedia(); const filtered = current.filter((item) => item.id !== id); dataStore.setMedia(filtered); }, // Documents getDocuments: (): Document[] => { if (!isBrowser) return documentsData; const stored = localStorage.getItem(KEYS.DOCUMENTS); return stored ? JSON.parse(stored) : documentsData; }, setDocuments: (data: Document[]) => { if (isBrowser) { localStorage.setItem(KEYS.DOCUMENTS, JSON.stringify(data)); } }, addDocument: (document: Omit) => { const current = dataStore.getDocuments(); const newItem = { ...document, id: Date.now() }; dataStore.setDocuments([newItem, ...current]); return newItem; }, updateDocument: (id: number, document: Partial) => { const current = dataStore.getDocuments(); const updated = current.map((item) => item.id === id ? { ...item, ...document } : item ); dataStore.setDocuments(updated); }, deleteDocument: (id: number) => { const current = dataStore.getDocuments(); const filtered = current.filter((item) => item.id !== id); dataStore.setDocuments(filtered); }, // Metro Stations getMetroStations: (): MetroStation[] => { if (!isBrowser) return metroStations; const stored = localStorage.getItem(KEYS.METRO_STATIONS); return stored ? JSON.parse(stored) : metroStations; }, setMetroStations: (data: MetroStation[]) => { if (isBrowser) { localStorage.setItem(KEYS.METRO_STATIONS, JSON.stringify(data)); } }, updateStation: (id: number, station: Partial) => { const current = dataStore.getMetroStations(); const updated = current.map((item) => item.id === id ? { ...item, ...station } : item ); dataStore.setMetroStations(updated); }, // Reset all data resetAll: () => { if (isBrowser) { localStorage.removeItem(KEYS.SLIDER); localStorage.removeItem(KEYS.NEWS); localStorage.removeItem(KEYS.MEDIA); localStorage.removeItem(KEYS.DOCUMENTS); localStorage.removeItem(KEYS.METRO_STATIONS); } } };