package handlers

import (
	

	
	
	
	
	
)

// CreateCronJob creates new cron job
func ( *fiber.Ctx) error {
	// Parse payload
	var  models.CronJob
	if  := .BodyParser(&);  != nil {
		return 
	}

	,  := uuid.Parse(.FormValue("extension_id"))
	if  != nil {
		return errors.New("invalid extension id")
	}

	,  := uuid.Parse(.FormValue("user_id"))
	if  != nil {
		return errors.New("invalid user id")
	}

	,  := uuid.Parse(.FormValue("server_id"))
	if  != nil {
		return errors.New("invalid server id")
	}

	// Fill default fields
	 := models.NewCronJob()
	.ID = .ID
	.Status = .Status
	.Message = .Message

	.BaseURL = "https://127.0.0.1"
	.ExtensionID = &
	.ServerID = &
	.UserID = &

	// Create cronjob rule on db
	if  := database.Connection().Model(&models.CronJob{}).Create(&).Error;  != nil {
		return 
	}

	// Register and run cronjob
	if  := cron_jobs.RegisterAndRun(&);  != nil {
		return 
	}

	return .JSON("Cronjob registered successfully.")
}

// IndexCronJobs lists all cron jobs
func ( *fiber.Ctx) error {
	// Set empty variable for later use
	var  []*models.CronJob
	// Get all cronjobs
	if  := database.Connection().Model(&models.CronJob{}).Find(&).Error;  != nil {
		return 
	}

	return .JSON()
}

// DeleteCronJob deletes specified cron job
func ( *fiber.Ctx) error {
	// Parse uuid
	,  := uuid.Parse(.Params("id"))
	if  != nil {
		return 
	}

	// Remove cronjob from global scheduler
	if  := cron_jobs.Delete(&);  != nil {
		return 
	}

	// If cronjob successfully remove by scheduler, remove it from storage
	if  := database.Connection().Model(&models.CronJob{}).
		Where("id = ?", ).Delete(&models.CronJob{}).Error;  != nil {
		return 
	}

	return .JSON("Item deleted successfully.")
}