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

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

/**
 * 平台文件转换配置。Secret 只能通过环境变量或部署平台注入，不得写入前端。
 */
@Component
@ConfigurationProperties(prefix = "document-conversion")
public class DocumentConversionProperties {

    /** 是否启用文件转换接口。 */
    private boolean enabled = false;
    /** 手动上传转换访问口令。 */
    private String accessKey = "";
    /** LibreOffice soffice 可执行文件路径。 */
    private String sofficePath = "soffice";
    /** 文件转换临时目录根路径。 */
    private String tempDir = System.getProperty("java.io.tmpdir") + "/th-hotel-document-conversion";
    /** 单个 Excel 最大字节数。 */
    private long maxFileBytes = 20 * 1024 * 1024L;
    /** 单次转换超时时间秒。 */
    private long timeoutSeconds = 60L;
    /** 最大并发转换数。 */
    private int maxConcurrent = 2;
    /** PDF 输出 OSS 前缀。 */
    private String outputOssPrefix = "document-conversions/excel-to-pdf/";
    /** 自动转换 worker 开关，CP2 暂不使用，预留给后续邮件附件自动转换。 */
    private boolean workerEnabled = false;

    public boolean isEnabled() {
        return enabled;
    }

    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    public String getAccessKey() {
        return accessKey;
    }

    public void setAccessKey(String accessKey) {
        this.accessKey = accessKey;
    }

    public String getSofficePath() {
        return sofficePath;
    }

    public void setSofficePath(String sofficePath) {
        this.sofficePath = sofficePath;
    }

    public String getTempDir() {
        return tempDir;
    }

    public void setTempDir(String tempDir) {
        this.tempDir = tempDir;
    }

    public long getMaxFileBytes() {
        return maxFileBytes;
    }

    public void setMaxFileBytes(long maxFileBytes) {
        this.maxFileBytes = maxFileBytes;
    }

    public long getTimeoutSeconds() {
        return timeoutSeconds;
    }

    public void setTimeoutSeconds(long timeoutSeconds) {
        this.timeoutSeconds = timeoutSeconds;
    }

    public int getMaxConcurrent() {
        return maxConcurrent;
    }

    public void setMaxConcurrent(int maxConcurrent) {
        this.maxConcurrent = maxConcurrent;
    }

    public String getOutputOssPrefix() {
        return outputOssPrefix;
    }

    public void setOutputOssPrefix(String outputOssPrefix) {
        this.outputOssPrefix = outputOssPrefix;
    }

    public boolean isWorkerEnabled() {
        return workerEnabled;
    }

    public void setWorkerEnabled(boolean workerEnabled) {
        this.workerEnabled = workerEnabled;
    }
}
