#!/usr/bin/env python3
"""Plot a uniaxial macrospin energy landscape."""

from __future__ import annotations

import argparse
import numpy as np
import matplotlib.pyplot as plt


def energy(theta: np.ndarray, K: float, H: float, alpha: float) -> np.ndarray:
    """Dimensionless uniaxial anisotropy plus Zeeman energy."""
    return K * np.sin(theta) ** 2 - H * np.cos(theta - alpha)


def main() -> None:
    parser = argparse.ArgumentParser()
    parser.add_argument("--K", type=float, default=1.0, help="anisotropy scale")
    parser.add_argument("--H", type=float, default=0.45, help="applied field scale")
    parser.add_argument("--alpha", type=float, default=0.0, help="field angle in degrees")
    args = parser.parse_args()

    theta = np.linspace(-np.pi, np.pi, 721)
    e = energy(theta, args.K, args.H, np.deg2rad(args.alpha))

    fig, ax = plt.subplots(figsize=(7, 3.8))
    ax.plot(np.rad2deg(theta), e, lw=2.5, color="#2563eb")
    ax.set_xlabel("magnetization angle theta (deg)")
    ax.set_ylabel("dimensionless energy")
    ax.set_title("Uniaxial macrospin energy landscape")
    ax.grid(alpha=0.25)
    plt.show()


if __name__ == "__main__":
    main()
