#!/bin/bash

# Per-location directory layout helpers. Each backup location is one
# directory under configs/backup/locations/<idx>/ containing:
#
#   location.config   — sourced at startup, holds CFG_BACKUP_LOC_<idx>_*
#                       including PASSWORD (auto-randomized from
#                       RANDOMIZEDPASSWORD<N> on first install)
#   ssh.key           — private SSH key when AUTH=key (chmod 0600)
#   kopia.config      — kopia adapter's connection state (chmod 0600)
#
# Everything for one location is co-located here so add/remove operations
# are mkdir / rm of one directory.

backupLocationsDir()
{
    echo "$configs_dir/backup/locations"
}

backupLocationDir()
{
    local idx="$1"
    echo "$(backupLocationsDir)/$idx"
}

backupLocationConfig()
{
    local idx="$1"
    echo "$(backupLocationDir "$idx")/location.config"
}

backupLocationSshKey()
{
    local idx="$1"
    echo "$(backupLocationDir "$idx")/ssh.key"
}

backupLocationKopiaConfig()
{
    local idx="$1"
    echo "$(backupLocationDir "$idx")/kopia.config"
}

# Owner used when chowning per-location files. Falls back to sudo_user_name
# when docker_install_user hasn't been resolved (CLI startup before
# checkInstallTypeRequirement runs).
backupLocationOwner()
{
    echo "${docker_install_user:-${sudo_user_name:-libreportal}}"
}

backupLocationEnsureDir()
{
    local idx="$1"
    local dir
    dir=$(backupLocationDir "$idx")
    local owner
    owner=$(backupLocationOwner)
    sudo mkdir -p "$dir"
    sudo chown "$owner":"$owner" "$dir"
    sudo chmod 0700 "$dir"
}

backupLocationResolvedPath()
{
    local idx="$1"
    local mode
    mode=$(resticLocationField "$idx" PATH_MODE)
    if [[ "$mode" == "auto" ]]; then
        # Base dir is the configurable Default Backup Location (Backup Engine
        # config); each location gets its own numbered subfolder.
        local base="${CFG_BACKUP_DEFAULT_PATH:-$docker_dir/backups}"
        echo "${base%/}/${idx}"
    else
        resticLocationField "$idx" PATH
    fi
}
