package com.zhengmeng.ocrplatform.engine;

import com.zhengmeng.ocrplatform.settings.AppSettingEntity;
import com.zhengmeng.ocrplatform.settings.AppSettingRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.Map;

@Service
public class OcrEngineRuntimeStateService {
    private static final Map<String, Boolean> DEFAULTS = Map.of(
            "paddle-layout", true,
            "pp-chatocr", false
    );

    private final AppSettingRepository repository;

    public OcrEngineRuntimeStateService(AppSettingRepository repository) {
        this.repository = repository;
    }

    @Transactional(readOnly = true)
    public boolean isEnabled(String engineCode, boolean configured) {
        return repository.findById(key(engineCode))
                .map(entity -> Boolean.parseBoolean(entity.getValue()))
                .orElse(DEFAULTS.getOrDefault(engineCode, configured));
    }

    @Transactional
    public boolean updateEnabled(String engineCode, boolean enabled) {
        LocalDateTime now = LocalDateTime.now();
        AppSettingEntity entity = repository.findById(key(engineCode)).orElseGet(() -> {
            AppSettingEntity created = new AppSettingEntity();
            created.setKey(key(engineCode));
            created.setLabel(label(engineCode));
            created.setType("switch");
            created.setDefaultValue(Boolean.toString(DEFAULTS.getOrDefault(engineCode, enabled)));
            created.setDescription("OCR 引擎运行态开关，由引擎管理页面维护。");
            created.setCreatedAt(now);
            return created;
        });
        entity.setValue(Boolean.toString(enabled));
        entity.setUpdatedAt(now);
        repository.save(entity);
        return enabled;
    }

    private String key(String engineCode) {
        return "ocr.engine.runtime_enabled." + engineCode;
    }

    private String label(String engineCode) {
        return "OCR 引擎开关：" + engineCode;
    }
}
