package kr.or.bok.rtgs.louisvuitton

import jakarta.persistence.Column
import jakarta.persistence.Entity
import jakarta.persistence.Id
import jakarta.persistence.Table
import kr.or.bok.rtgs.common.ledger.Account
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.autoconfigure.domain.EntityScan
import org.springframework.boot.runApplication
import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.data.jpa.repository.config.EnableJpaRepositories

/**
 * LUIS VUITTON (시스템관리) — 관리자 기능: DB 초기화, 코드(참가기관) 관리, 사용자 권한 관리, 대사.
 * (3차 PoC 미구현분. 인증/로그인 강제는 후속 단계; 지금은 사용자·권한 "관리 마스터"만.)
 */
@SpringBootApplication
@EntityScan(basePackages = ["kr.or.bok.rtgs.common.ledger", "kr.or.bok.rtgs.louisvuitton"])
@EnableJpaRepositories(considerNestedRepositories = true, basePackages = ["kr.or.bok.rtgs.louisvuitton"])
class LouisVuittonApplication

/** 사용자·권한 관리 마스터. role = ADMIN / ORG_S(송신기관) / ORG_R(수신기관). */
@Entity
@Table(name = "app_user")
class AppUser(
    @Id @Column(name = "username", length = 32) var username: String = "",
    @Column(name = "display_name", length = 64) var displayName: String = "",
    @Column(name = "role", length = 16) var role: String = "ORG_S",
    @Column(name = "org_code", length = 4) var orgCode: String? = null,
    @Column(name = "created_at") var createdAt: Long = 0,
)

interface AppUserRepository : JpaRepository<AppUser, String>
interface AccountRepository : JpaRepository<Account, String>

fun main(args: Array<String>) {
    runApplication<LouisVuittonApplication>(*args)
}
