// Pure function for week-rollover logic.
// Exported separately for testability.

/**
 * Apply week rollover to state file content.
 * Returns updated content string if rollover was applied, null otherwise.
 *
 * @param {string} stateContent - Full state file content (with YAML frontmatter)
 * @param {string} currentWeek - Week value from state file (e.g. "2026-W14")
 * @param {string} actualWeek - Computed current ISO week (e.g. "2026-W15")
 * @returns {{ content: string, message: string } | null}
 */
export function applyWeekRollover(stateContent, currentWeek, actualWeek) {
  if (!actualWeek) return null;

  // Case 1: current_week is empty — initialize without resetting posts
  if (!currentWeek) {
    const updated = stateContent.replace(
      /^current_week: .*/m,
      `current_week: "${actualWeek}"`
    );
    if (updated === stateContent) return null;
    return {
      content: updated,
      message: `Initialized current_week to ${actualWeek}.`
    };
  }

  // Case 2: week matches — no action needed
  if (currentWeek === actualWeek) return null;

  // Case 3: week changed — reset posts_this_week and update current_week
  let updated = stateContent;
  updated = updated.replace(
    /^posts_this_week: .*/m,
    'posts_this_week: 0'
  );
  updated = updated.replace(
    /^current_week: .*/m,
    `current_week: "${actualWeek}"`
  );

  if (updated === stateContent) return null;

  return {
    content: updated,
    message: `Auto-reset: posts_this_week → 0 for new week ${actualWeek} (was ${currentWeek}).`
  };
}
