package liman

import (
	
	
	
	
	
	

	
	
	
	
	
	
	
)

// GetExtension searches db and returns matching extension
func ( *models.Extension) (*models.Extension, error) {
	 := database.Connection().Where(&).First(&)

	if .Error != nil {
		return nil, logger.FiberError(fiber.StatusNotFound, "cannot found extension with this id")
	}

	if .RowsAffected > 0 {
		return , nil
	}

	return nil, logger.FiberError(fiber.StatusNotFound, "cannot found extension with this id")
}

// GetExtensionJSON Retrieves extension's JSON file from filesystem and returns it as object
func ( *models.Extension) (map[string]any, error) {
	 := ""
	if len(.Name) > 0 {
		 = strings.ToLower(.Name)
	} else {
		,  := GetExtension()
		 = strings.ToLower(.Name)

		if  != nil {
			return nil, 
		}
	}

	,  := os.ReadFile(fmt.Sprintf("%s/%s/db.json", constants.EXTENSIONS_PATH, ))

	if  != nil {
		return nil, 
	}

	 := make(map[string]any)
	 = json.Unmarshal(, &)
	if  != nil {
		return nil, 
	}

	return , nil
}

// GetLicence searches db and returns matching licence
func ( *models.Extension) (*models.Licence, error) {
	 := &models.Licence{}

	 := database.Connection().Find(&, "extension_id = ?", .ID).RowsAffected

	if  > 0 {
		return , nil
	}

	return nil, errors.New("licence not found")
}

// SetExtensionDb sets the value of vault key
func (, , ,  string,  bool) (string, error) {
	 := false
	 := []*models.Settings{}

	if  {
		 := database.Connection().Where(&, "name = ? AND server_id = ?", , ).Error
		if  != nil {
			return "", 
		}
	} else {
		 := database.Connection().Where(&, "name = ? AND server_id = ? AND user_id = ?", , , ).Error
		if  != nil {
			return "", 
		}
	}

	for ,  := range  {
		 := helpers.Env("APP_KEY", "")

		 = true

		 := database.Connection().Model(&).Updates(map[string]any{
			"value":      aes256.Encrypt(, ),
			"updated_at": time.Now().Format(time.RFC3339),
		}).Error

		if  != nil {
			return "", 
		}
	}

	if ! {
		 := &models.Settings{
			ServerID: ,
			UserID:   ,
			Name:     ,
			Value:    aes256.Encrypt(, helpers.Env("APP_KEY", "")++),
		}

		 := database.Connection().Create().Error
		if  != nil {
			return "", 
		}
	}

	return , nil
}