(* vim: set ts=2 sw=2 et : *)

(* open Event;; *)

type config_t = {
  mutable width : int ;
  mutable height : int;
}



type notification_t =
  | Graphics_status of Graphics.status
  | Tick
;;



type game_event_t = 
  | MoveLeft
  | MoveRight
  | MoveUp
  | MoveDown
  | Action
  | ActionTwo
  | Help
  | Quit
  | NoEvent
;;

let image_filename = "images/test.png"
;;



let string_of_keyboard_event event =
  try
    let chr = Sdlkey.char_of_key event.Sdlevent.keysym 
    in 
    String.make 1 chr
  with
  | Invalid_argument _ -> "unknown-key"
;;



(*
let rec event_loop () =
  print_endline "Event_loop...";
  Sdltimer.delay 20;
  let match_event event = (
    match event with 
    | Sdlevent.KEYDOWN {Sdlevent.keysym=Sdlkey.KEY_ESCAPE} ->
        print_endline "You pressed escape! The fun is over now."

    | Sdlevent.KEYDOWN event -> 
        Keyboard.handle_event event;
        let keystr = string_of_keyboard_event event
        in
        print_endline ("You pressed " ^ keystr);
        event_loop ()

    | _ -> 
        event_loop ()
  ) in

  let event_opt = Sdlevent.poll () 
  in 

  match event_opt with
  | None -> event_loop ()
  | Some event -> match_event event;
;;
*)


let rec game_loop ~screen =
  let image = Sdlloader.load_image image_filename
  and image_from = Sdlvideo.rect 0 0 300 300 
  and image_to = Sdlvideo.rect 100 0 300 300 
  in
  Sdlvideo.blit_surface ~src:image ~src_rect:image_from ~dst:screen ~dst_rect:image_to ();
  Sdlvideo.flip screen;
  (* let action_fun = event_loop () ; *)
  game_loop ~screen:screen
;;



let main () =
  let player1 = Player.create ()
  and map1 = Level.create ()
  and config = { width = 640 ; height = 480 }
  in
  ignore player1 ;
  ignore map1 ;
  (* open window *)
  Sdl.init [`VIDEO];
  at_exit Sdl.quit;
  Sdlttf.init ();
  at_exit Sdlttf.quit;
  (* set parameters & title *)
  let screen = Sdlvideo.set_video_mode config.width config.height [`DOUBLEBUF]
  in
  game_loop ~screen:screen;
  (* close window *)
;;

main ();
