import deriveTiming from "@suno/studiokit/deriveTiming.js";
import { StudioProjectState } from "@suno/studiokit/projectState/fixStudioProjectState.js";
import { StudioTrack } from "@suno/studiokit/projectState/fixTrack.js";

import { RenderableState } from "./types.js";

export default function getRenderableState(
  project: StudioProjectState
): RenderableState {
  const result: RenderableState = {
    timing: {
      bps: 1,
      bpsAutomation: [],
    },
    tracksById: {},
    effectivelyMutedTracks: {},
  };

  const anyTrackSolo = project.tracks.some((track) => track.solo);

  for (const track of project.tracks as StudioTrack[]) {
    result.tracksById[track.id] = track as unknown as StudioTrack;
    result.effectivelyMutedTracks[track.id] = anyTrackSolo
      ? !track.solo
      : track.mute;
  }

  result.timing = deriveTiming(project);

  return result;
}
