package com.goldenchart.config;

import com.google.auth.oauth2.GoogleCredentials;
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import jakarta.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;

import java.io.FileInputStream;
import java.io.InputStream;

@Configuration
@Slf4j
public class FirebaseConfig {

    @Value("${firebase.service-account-file:firebase-service-account.json}")
    private String serviceAccountFile;

    @Value("${firebase.enabled:false}")
    private boolean firebaseEnabled;

    @PostConstruct
    public void initialize() {
        if (!firebaseEnabled) {
            log.info("[Firebase] disabled (firebase.enabled=false)");
            return;
        }
        if (!FirebaseApp.getApps().isEmpty()) return;

        try (InputStream in = openServiceAccount()) {
            if (in == null) {
                log.warn("[Firebase] service account not found — FCM disabled");
                return;
            }
            FirebaseOptions options = FirebaseOptions.builder()
                    .setCredentials(GoogleCredentials.fromStream(in))
                    .build();
            FirebaseApp.initializeApp(options);
            log.info("[Firebase] Admin SDK initialized — FCM enabled");
        } catch (Exception e) {
            log.warn("[Firebase] init failed: {}", e.getMessage());
        }
    }

    private InputStream openServiceAccount() {
        try {
            var res = new ClassPathResource(serviceAccountFile);
            if (res.exists()) return res.getInputStream();
        } catch (Exception ignored) { }
        try {
            return new FileInputStream(serviceAccountFile);
        } catch (Exception ignored) { }
        return null;
    }
}
