import qualified Board
import qualified Pack

import Array
import IO
import System
import Random


usage = putStrLn "Usage: needs <map> <num packs/base> <max pack weigh>"

main = do args <- getArgs 
          case args of 
            m:n:w:_ -> 
              do let num   = read n :: Int
                     maxW  = read w :: Integer
                 Just board <- Board.load m
                 let bases = Board.homeBases board
                 packs <- let
                    ?num = num
                    ?maxW = maxW
                    ?board = board
                    in sequence (zipWith genPacksAt bases [1,num+1..])
                 print (bases `zip` packs)
            _ -> usage


genPacksAt p uid = sequence (zipWith genPackAt (repeat p) 
                            [uid .. uid + ?num - 1])

genPackAt p uid  = 
  do w <- randomRIO (1,?maxW)
     d <- dest ?board
     return $ Pack.Mk 
        { Pack.uid = uid
        , Pack.weight = w
        , Pack.dest = d
        }
                      

dest b = do pos <- randomRIO (bounds b) :: IO Board.Pos
            if b `Board.tileAt` pos == Board.Normal 
              then return pos
              else dest b
         

