// @ts-check
/**
* @import {treeAction} from './../../types.js'
*/
import { query, HEX2uuid } from '@commtool/sql-query'
import rebuildFees from '../rebuildFees.js'
import { errorLoggerUpdate } from '../../utils/requestLogger.js'
/**
* Handles the `family` remove action.
*
* Deletes the `family` / `familyFees` link from the family object.
* If that was the last member the orphaned Member row is cleaned up;
* otherwise membership fees are recalculated for the affected family.
*
* @param {treeAction} action
* @returns {Promise<void>}
*/
export const removeFamilyAction = async (action) => {
try {
await query(
`DELETE FROM Links WHERE UID=? AND Type IN ('family','familyFees') AND UIDTarget=?`,
[action.UIDObjectID, action.UIDoldTarget],
)
const rest = await query(
`SELECT Member.UID FROM Links
INNER JOIN Member ON (Member.UID=Links.UID AND Links.Type IN ('family','familyFees'))
WHERE Links.UIDTarget=?`,
[action.UIDoldTarget],
)
if (rest.length > 0) {
rebuildFees(action.UIDoldTarget, HEX2uuid(action.UIDroot))
} else {
query(`DELETE FROM Member WHERE UID=?`, [action.UIDoldTarget])
}
} catch (e) {
errorLoggerUpdate(e || new Error('removeFamilyAction: Unknown error occurred'))
}
}