package com.saas.admin.config;

import com.saas.admin.entity.User;
import com.saas.admin.repository.UserRepository;
import com.saas.shared.enums.UserType;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
@Slf4j
@RequiredArgsConstructor
public class SystemAdminSeeder {

    private final UserRepository userRepository;
    private final PasswordEncoder passwordEncoder;

    @Bean
    public CommandLineRunner seedSystemAdmin() {
        return args -> {
            if (userRepository.count() == 0 || !userRepository.existsByEmail("superadmin@system.com")) {
                log.info("🚀 Seeding System Admin User...");

                User admin = new User();
                admin.setEmail("superadmin@system.com");
                admin.setPassword(passwordEncoder.encode("Admin@123"));
                admin.setFirstName("Super");
                admin.setLastName("Admin");
                admin.setUserType(UserType.SYSTEM_ADMIN);
                admin.setRole("SYSTEM_ADMIN"); // Important for RBAC

                userRepository.save(admin);

                log.info("✅ System Admin seeded successfully: superadmin@system.com / Admin@123");
            } else {
                log.info("ℹ️ System Admin already exists. Skipping seeding.");
            }
        };
    }
}
