package cn.nianxx.thhotel.platform.identity.service.impl;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * 登录权限底座配置。账号密码等敏感配置只能通过环境变量或部署 Secret 注入。
 */
@Component
@ConfigurationProperties(prefix = "auth")
public class AuthProperties {

    /** 启动初始化配置。 */
    private Bootstrap bootstrap = new Bootstrap();
    /** session 配置。 */
    private Session session = new Session();

    public Bootstrap getBootstrap() {
        return bootstrap;
    }

    public void setBootstrap(Bootstrap bootstrap) {
        this.bootstrap = bootstrap;
    }

    public Session getSession() {
        return session;
    }

    public void setSession(Session session) {
        this.session = session;
    }

    /**
     * 启动初始化配置。
     */
    public static class Bootstrap {

        /** 初始超级管理员配置。 */
        private Admin admin = new Admin();
        /** 默认酒店业务 ID。 */
        private String defaultHotelId = "";
        /** 默认酒店名称。 */
        private String defaultHotelName = "";
        /** 默认酒店时区。 */
        private String defaultHotelTimeZone = "Asia/Bangkok";

        public Admin getAdmin() {
            return admin;
        }

        public void setAdmin(Admin admin) {
            this.admin = admin;
        }

        public String getDefaultHotelId() {
            return defaultHotelId;
        }

        public void setDefaultHotelId(String defaultHotelId) {
            this.defaultHotelId = defaultHotelId;
        }

        public String getDefaultHotelName() {
            return defaultHotelName;
        }

        public void setDefaultHotelName(String defaultHotelName) {
            this.defaultHotelName = defaultHotelName;
        }

        public String getDefaultHotelTimeZone() {
            return defaultHotelTimeZone;
        }

        public void setDefaultHotelTimeZone(String defaultHotelTimeZone) {
            this.defaultHotelTimeZone = defaultHotelTimeZone;
        }
    }

    /**
     * 初始超级管理员配置。
     */
    public static class Admin {

        /** 初始超级管理员用户名。 */
        private String username = "";
        /** 初始超级管理员密码。 */
        private String password = "";
        /** 初始超级管理员展示名。 */
        private String displayName = "系统管理员";

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        public String getDisplayName() {
            return displayName;
        }

        public void setDisplayName(String displayName) {
            this.displayName = displayName;
        }
    }

    /**
     * session 配置。
     */
    public static class Session {

        /** session 有效分钟数，默认 12 小时。 */
        private long ttlMinutes = 720L;

        public long getTtlMinutes() {
            return ttlMinutes;
        }

        public void setTtlMinutes(long ttlMinutes) {
            this.ttlMinutes = ttlMinutes;
        }
    }
}
