import React, { createContext, useContext, useState, useEffect } from 'react';
import {
PROMISES, SERVICES, PACKAGES, SPECIAL_OFFERS,
GALLERY_IMAGES, STATS, WHY_CHOOSE_ITEMS, TESTIMONIALS,
TEAM, FAQS, BLOG_POSTS, DEFAULT_SETTINGS, DEFAULT_VISIBILITY, CLIENT_LOGOS, DEFAULT_TEXTS,
DEFAULT_HEADER, DEFAULT_FOOTER, BEFORE_AFTER_ITEMS
} from '../data';
import { supabase, isSupabaseConfigured } from '../lib/supabase';
import { GlobalSettings, SectionVisibility, SectionTexts, HeaderConfig, FooterConfig, BeforeAfterItem } from '../types';
// Estado inicial combina todos os dados
const INITIAL_DATA = {
settings: DEFAULT_SETTINGS,
visibility: DEFAULT_VISIBILITY,
hero: {
title: "Manutenção e Reparos Automotivos",
subtitle: "24h de atendimento • Especialistas em todas as marcas • Garantia em todos os serviços.",
bgImage: "https://images.unsplash.com/photo-1625047509168-a7026f36de04?auto=format&fit=crop&q=80&w=1920",
buttonText: "Agendar Agora"
},
texts: DEFAULT_TEXTS, // Novos textos
header: DEFAULT_HEADER, // Config do Menu
footer: DEFAULT_FOOTER, // Config do Rodapé
promises: PROMISES,
services: SERVICES,
packages: PACKAGES,
specialOffers: SPECIAL_OFFERS,
gallery: GALLERY_IMAGES,
beforeAfter: BEFORE_AFTER_ITEMS, // Nova seção
stats: STATS,
whyChoose: WHY_CHOOSE_ITEMS,
testimonials: TESTIMONIALS,
team: TEAM,
faqs: FAQS,
blog: BLOG_POSTS,
clients: CLIENT_LOGOS
};
type DataType = typeof INITIAL_DATA;
interface DataContextType {
data: DataType;
updateData: (section: keyof DataType, newData: any) => Promise;
isLoading: boolean;
getWhatsAppLink: (message?: string) => string;
}
const DataContext = createContext(undefined);
export const DataProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
const [data, setData] = useState(INITIAL_DATA);
const [isLoading, setIsLoading] = useState(true);
// Carregar dados ao iniciar
useEffect(() => {
loadData();
}, []);
const loadData = async () => {
try {
if (isSupabaseConfigured()) {
const { data: dbData, error } = await supabase.from('site_content').select('*').single();
if (dbData && !error) {
// Merge with initial data to ensure new fields are present if DB is old
setData(prev => ({
...INITIAL_DATA,
...dbData.content,
texts: { ...INITIAL_DATA.texts, ...dbData.content.texts },
header: { ...INITIAL_DATA.header, ...dbData.content.header },
footer: { ...INITIAL_DATA.footer, ...dbData.content.footer }
}));
}
} else {
const localData = localStorage.getItem('car_site_data');
if (localData) {
const parsedData = JSON.parse(localData);
setData(prev => ({
...INITIAL_DATA,
...parsedData,
texts: { ...INITIAL_DATA.texts, ...parsedData.texts },
header: { ...INITIAL_DATA.header, ...parsedData.header },
footer: { ...INITIAL_DATA.footer, ...parsedData.footer }
}));
}
}
} catch (error) {
console.error("Erro ao carregar dados", error);
} finally {
setIsLoading(false);
}
};
const updateData = async (section: keyof DataType, newData: any) => {
const updatedFullData = { ...data, [section]: newData };
setData(updatedFullData);
if (isSupabaseConfigured()) {
await supabase.from('site_content').upsert({ id: 1, content: updatedFullData });
} else {
localStorage.setItem('car_site_data', JSON.stringify(updatedFullData));
}
};
const getWhatsAppLink = (message: string = '') => {
const phone = data.settings.whatsappNumber.replace(/\D/g, '');
const encodedMessage = encodeURIComponent(message);
return `https://wa.me/${phone}?text=${encodedMessage}`;
};
return (
{children}
);
};
export const useData = () => {
const context = useContext(DataContext);
if (context === undefined) {
throw new Error('useData must be used within a DataProvider');
}
return context;
};