package config

import (
	"os"

	"github.com/photoprism/photoprism/pkg/fs"
)

// RawEnabled checks if indexing and conversion of RAW images is enabled.
func (c *Config) RawEnabled() bool {
	return !c.DisableRaw()
}

// RawPresets checks if RAW converter presents should be used (may reduce performance).
func (c *Config) RawPresets() bool {
	return c.options.RawPresets
}

// DarktableBin returns the darktable-cli executable file name.
func (c *Config) DarktableBin() string {
	return findBin(c.options.DarktableBin, "darktable-cli")
}

// DarktableBlacklist returns the darktable file extension blacklist.
func (c *Config) DarktableBlacklist() string {
	return c.options.DarktableBlacklist
}

// DarktableConfigPath returns the darktable config directory.
func (c *Config) DarktableConfigPath() string {
	return fs.Abs(c.options.DarktableConfigPath)
}

// DarktableCachePath returns the darktable cache directory.
func (c *Config) DarktableCachePath() string {
	return fs.Abs(c.options.DarktableCachePath)
}

// CreateDarktableCachePath creates and returns the darktable cache directory.
func (c *Config) CreateDarktableCachePath() (string, error) {
	cachePath := c.DarktableCachePath()

	if cachePath == "" {
		return "", nil
	} else if err := os.MkdirAll(cachePath, fs.ModeDir); err != nil {
		return cachePath, err
	} else {
		c.options.DarktableCachePath = cachePath
	}

	return cachePath, nil
}

// CreateDarktableConfigPath creates and returns the darktable config directory.
func (c *Config) CreateDarktableConfigPath() (string, error) {
	configPath := c.DarktableConfigPath()

	if configPath == "" {
		return "", nil
	} else if err := os.MkdirAll(configPath, fs.ModeDir); err != nil {
		return configPath, err
	} else {
		c.options.DarktableConfigPath = configPath
	}

	return configPath, nil
}

// DarktableEnabled checks if Darktable is enabled for RAW conversion.
func (c *Config) DarktableEnabled() bool {
	return !c.DisableDarktable()
}

// RawTherapeeBin returns the rawtherapee-cli executable file name.
func (c *Config) RawTherapeeBin() string {
	return findBin(c.options.RawTherapeeBin, "rawtherapee-cli")
}

// RawTherapeeBlacklist returns the RawTherapee file extension blacklist.
func (c *Config) RawTherapeeBlacklist() string {
	return c.options.RawTherapeeBlacklist
}

// RawTherapeeEnabled checks if RawTherapee is enabled for RAW conversion.
func (c *Config) RawTherapeeEnabled() bool {
	return !c.DisableRawTherapee()
}

// SipsEnabled checks if SIPS is enabled for RAW conversion.
func (c *Config) SipsEnabled() bool {
	return !c.DisableSips()
}

// SipsBin returns the SIPS executable file name.
func (c *Config) SipsBin() string {
	return findBin(c.options.SipsBin, "sips")
}

// SipsBlacklist returns the Sips file extension blacklist.
func (c *Config) SipsBlacklist() string {
	return c.options.SipsBlacklist
}

// HeifConvertBin returns the heif-convert executable file name.
func (c *Config) HeifConvertBin() string {
	return findBin(c.options.HeifConvertBin, "heif-convert")
}

// HeifConvertEnabled checks if heif-convert is enabled for HEIF conversion.
func (c *Config) HeifConvertEnabled() bool {
	return !c.DisableHeifConvert()
}
