Before material or style, there's a more basic decision that changes both the price and the scope of the job: are you replacing just the window inside the existing frame, or tearing the frame out too?
An insert replacement drops a new window into the existing frame, which stays in place. It's faster (often a single day for a whole house), cheaper (less labor, no exterior trim or siding disturbed), and doesn't usually require a permit since the opening size and structure aren't changing. The catch: it only works if the existing frame is square, solid, and not rotted — an insert window is slightly smaller than a full-frame replacement to fit inside the old frame, which very marginally reduces glass area and can be a dealbreaker on a badly out-of-square opening.
A full-frame replacement tears the old frame out down to the rough opening, replacing everything — frame, sash, and often exterior trim. It costs more (more labor, more materials, sometimes siding or stucco repair) and more often requires a permit, especially if the new opening size differs at all from the old one. It's the right call when the existing frame is rotted, water-damaged, badly out of square, or when you're intentionally changing the window's size or adding an opening that wasn't there before.
Open the window and check the frame for soft spots (press a screwdriver into the wood — if it sinks in easily, that's rot), visible water staining, or a sash that doesn't sit flush and square. Any of those point toward full-frame. If the frame is solid and square and you're just swapping out an aging, drafty, or fogged window for a new one of the same size, an insert replacement is almost always the more economical path — and it's what most window contractors will recommend by default unless they see a structural reason not to.