import { readFileSync } from "node:fs";
import { z } from "zod";
import type { ObservedDeploymentIdentity } from "./evidence";

const ObservedDeploymentIdentitySchema = z.object({
  deploymentId: z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/),
  targetId: z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/),
  deployedSha: z.string().regex(/^[0-9a-f]{40}$/),
  deployedTree: z.string().regex(/^[0-9a-f]{40}$/),
  artifactDigest: z.string().regex(/^[0-9a-f]{64}$/),
}).strict();

export function loadObservedDeploymentIdentity(path: string): ObservedDeploymentIdentity | null {
  try {
    return ObservedDeploymentIdentitySchema.parse(JSON.parse(readFileSync(path, "utf8")));
  } catch {
    return null;
  }
}
