from typing import Any, Dict, Optional from .base import ApiClient class RadarrClient(ApiClient): async def get_system_status(self) -> Optional[Dict[str, Any]]: return await self.get("/api/v3/system/status") async def get_movie_by_tmdb_id(self, tmdb_id: int) -> Optional[Dict[str, Any]]: return await self.get("/api/v3/movie", params={"tmdbId": tmdb_id}) async def get_movies(self) -> Optional[Dict[str, Any]]: return await self.get("/api/v3/movie") async def get_root_folders(self) -> Optional[Dict[str, Any]]: return await self.get("/api/v3/rootfolder") async def get_quality_profiles(self) -> Optional[Dict[str, Any]]: return await self.get("/api/v3/qualityprofile") async def get_queue(self, movie_id: int) -> Optional[Dict[str, Any]]: return await self.get("/api/v3/queue", params={"movieId": movie_id}) async def search(self, movie_id: int) -> Optional[Dict[str, Any]]: return await self.post("/api/v3/command", payload={"name": "MoviesSearch", "movieIds": [movie_id]}) async def add_movie( self, tmdb_id: int, quality_profile_id: int, root_folder: str, monitored: bool = True, search_for_movie: bool = True, ) -> Optional[Dict[str, Any]]: payload = { "tmdbId": tmdb_id, "qualityProfileId": quality_profile_id, "rootFolderPath": root_folder, "monitored": monitored, "addOptions": {"searchForMovie": search_for_movie}, } return await self.post("/api/v3/movie", payload=payload) async def grab_release(self, guid: str, indexer_id: int) -> Optional[Dict[str, Any]]: return await self.post("/api/v3/release", payload={"guid": guid, "indexerId": indexer_id})