package com.flightticket.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import jakarta.persistence.EntityManagerFactory;

/**
 * Transaction management configuration
 * Requirements: 13.2
 * 
 * Configures:
 * - Transaction boundaries with @Transactional
 * - Automatic rollback on failure
 * - Transaction logging via AOP
 */
@Configuration
@EnableTransactionManagement
@EnableAspectJAutoProxy
public class TransactionConfig {
    
    /**
     * Configure JPA transaction manager
     * Ensures ACID properties for all database operations
     */
    @Bean
    public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(entityManagerFactory);
        
        // Enable rollback on all exceptions (including checked exceptions)
        transactionManager.setRollbackOnCommitFailure(true);
        
        return transactionManager;
    }
}
