package db

func ChangeManually(engineerId int, categoryId int, weekId float64, oldId int) error {
	previousOne, err := getLastOne(weekId, categoryId)
	if err != nil {
		return err
	}
	temp := findViaEngineerId(previousOne, engineerId)
	// -1 means no one occupies that week. TBD
	const UPDATE_SHIFT = `
		update
			shift
		set
			engineer_id = ?,
			category_id = ?,
			week_id = ?,
			manual_flag = 1,
			start_week = ?
		where
			week_id = ?
			AND category_id = ?
			and engineer_id = ?`
	const INSERT_SHIFT = `
		insert into
			shift (
				engineer_id,
				category_id,
				week_id,
				start_week,
				manual_flag,
				enable
			)
		values
			(
				?,
				?,
				?,
				?,
				1,
				1
			)`
	if oldId != -1 {
		if temp != nil {
			GetDB().Exec(UPDATE_SHIFT, engineerId, categoryId, weekId, temp.StartWeek, weekId, categoryId, oldId)
		} else {
			GetDB().Exec(UPDATE_SHIFT, engineerId, categoryId, weekId, weekId, weekId, categoryId, oldId)
		}
	} else {
		if temp != nil {
			GetDB().Exec(INSERT_SHIFT, engineerId, categoryId, weekId, temp.StartWeek)
		} else {
			GetDB().Exec(INSERT_SHIFT, engineerId, categoryId, weekId, weekId)
		}
	}
	return nil
}
