module Graphics.Ubigraph.Style (
   changeVStyle, newVStyle, newVStyleWithID, setVStyleAttr,
   changeEStyle, newEStyle, newEStyleWithID, setEStyleAttr,
) where

import Control.Monad.Reader (asks, liftIO)
import Network.XmlRpc.Client (remote)
import Graphics.Ubigraph.Base

toBool :: IO Int -> IO Bool
toBool x = do
  x' <- x
  return $ if x' == 0 then True else False

-- ################# STYLE
{-
/* Vertex styles */
result_t    ubigraph_change_vertex_style(vertex_id_t x, style_id_t s);
style_id_t  ubigraph_new_vertex_style(style_id_t parent_style);
result_t    ubigraph_new_vertex_style_w_id(style_id_t s, 
              style_id_t parent_style);
result_t    ubigraph_set_vertex_style_attribute(style_id_t s,
              const char* attribute, const char* value);
-}

-- ubigraph_change_vertex_style
changeVStyle :: StyleID -> VertexID -> Hubigraph Bool
changeVStyle sid vid =
    do serv <- asks server
       liftIO . toBool $ remote serv "ubigraph.change_vertex_style" vid sid

-- ubigraph_new_vertex_style
newVStyle :: StyleID -> Hubigraph StyleID
newVStyle sid =
    do serv <- asks server
       liftIO $ remote serv "ubigraph.new_vertex_style" sid

-- ubigraph_new_vertex_style_w_id
newVStyleWithID :: StyleID -> StyleID -> Hubigraph Bool
newVStyleWithID newid parentid =
    do serv <- asks server
       liftIO $ remote serv "ubigraph.new_vertex_style_w_id" newid parentid

-- ubigraph_set_vertex_style_attribute
setVStyleAttr :: VAttr -> StyleID -> Hubigraph Bool
setVStyleAttr va sid =
    do serv <- asks server
       liftIO . toBool $ remote serv "ubigraph.set_vertex_style_attribute" sid k v
           where (k, v) = toPair va

{-
/* Edge styles */
result_t    ubigraph_change_edge_style(edge_id_t x, style_id_t s);
style_id_t  ubigraph_new_edge_style(style_id_t parent_style);
result_t    ubigraph_new_edge_style_w_id(style_id_t s,
              style_id_t parent_style);
result_t    ubigraph_set_edge_style_attribute(style_id_t s,
              const char* attribute, const char* value);
-}

-- ubigraph_change_edge_style
changeEStyle :: StyleID -> EdgeID -> Hubigraph Bool
changeEStyle sid eid =
    do serv <- asks server
       liftIO . toBool $ remote serv "ubigraph.change_edge_style" eid sid

-- ubigraph_new_edge_style
newEStyle :: StyleID -> Hubigraph StyleID
newEStyle sid =
    do serv <- asks server
       liftIO $ remote serv "ubigraph.new_edge_style" sid

-- ubigraph_new_edge_style_w_id
newEStyleWithID :: StyleID -> StyleID -> Hubigraph Bool
newEStyleWithID newid parentid =
    do serv <- asks server
       liftIO $ remote serv "ubigraph.new_edge_style_w_id" newid parentid

-- ubigraph_set_style_attribute
setEStyleAttr :: EAttr -> StyleID -> Hubigraph Bool
setEStyleAttr ea sid =
    do serv <- asks server
       liftIO . toBool $ remote serv "ubigraph.set_edge_style_attribute" sid k v
           where (k, v) = toPair ea