package com.example.scaffold.config.database;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

import javax.sql.DataSource;

/**
 * 多数据库配置 - H2 / MySQL / PostgreSQL
 * 
 * 学习要点：
 * 1. @Profile - 根据环境选择配置
 * 2. 数据源配置
 * 3. 连接池配置
 */
@Slf4j
@Configuration
public class DatabaseConfig {
    
    /**
     * H2 内存数据库 - 开发测试用（默认）
     */
    @Bean
    @Profile("!mysql & !postgresql")
    @ConditionalOnMissingBean(DataSource.class)
    public DataSource h2DataSource(
            @Value("${spring.datasource.url:jdbc:h2:mem:springboot_scaffold_learn;MODE=MYSQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE}") String url,
            @Value("${spring.datasource.username:sa}") String username,
            @Value("${spring.datasource.password:}") String password) {
        log.info("🚀 使用 H2 数据库: {}", url);
        return DataSourceBuilder.create()
            .driverClassName("org.h2.Driver")
            .url(url)
            .username(username)
            .password(password)
            .build();
    }
    
    /**
     * MySQL 数据库
     */
    @Bean
    @Profile("mysql")
    public DataSource mysqlDataSource(
            @Value("${DB_URL:jdbc:mysql://localhost:3306/springboot_scaffold}") String url,
            @Value("${DB_USER:root}") String username,
            @Value("${DB_PASS:}") String password) {
        log.info("🚀 使用 MySQL 数据库: {}", url);
        return DataSourceBuilder.create()
            .driverClassName("com.mysql.cj.jdbc.Driver")
            .url(url)
            .username(username)
            .password(password)
            .build();
    }
    
    /**
     * PostgreSQL 数据库
     */
    @Bean
    @Profile("postgresql")
    public DataSource postgresqlDataSource(
            @Value("${DB_URL:jdbc:postgresql://localhost:5432/springboot_scaffold}") String url,
            @Value("${DB_USER:postgres}") String username,
            @Value("${DB_PASS:}") String password) {
        log.info("🚀 使用 PostgreSQL 数据库: {}", url);
        return DataSourceBuilder.create()
            .driverClassName("org.postgresql.Driver")
            .url(url)
            .username(username)
            .password(password)
            .build();
    }
}