/* load files onto the Network Walkman */
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <errno.h>
#include <string.h>
#include <glib.h>

#include <libnw.h>

void usage( void ) {
  if ( errno ) {
    perror( "nw-rm" );
  } else {
    fprintf( stderr, "usage: %s /device/path tracknum\n", "nw-rm" );
  }
  exit( 1 );
}

int main( int argc, char *argv[] ) {
  nw_device_t *dev;
  guint16 newtrack = 1;

  errno = 0; /* safety clown says ... */

  if ( argc < 2 ) {
    usage();
  }

  if ( argc == 2 ) {
    /* Go for auto-probe */
    GList *devs;
    guint32 d = 0;

    fprintf( stderr, "no device specified, auto-probing..." );
    devs = nw_get_devs( NULL );
    if ( g_list_length( devs ) == 0 ) {
      fprintf( stderr, "no device found\n" );
      exit( 1 );
    } else {
      fprintf( stderr, "done\n" );
    }
    if ( g_list_length( devs ) > 1 ) {
      fprintf( stderr, "More than one device found, please be more specific : \n" );

      while( g_list_nth( devs, d )) {
        nw_device_t *dv = g_list_nth_data( devs, d );

        fprintf( stderr, " %s", (gchar *)nw_get_attr( dv , "device" ));
        if ( nw_get_attr( dv , "mountpoint" ) != NULL ) {
          fprintf( stderr, " (mounted at %s)",
                   (gchar *)nw_get_attr( dv , "mountpoint" ));
        }
        fprintf( stderr, "\n" );

        nw_dev_free( dv );
        d++;
      }
      g_list_free( devs );
      exit( 1 );
    } else {
      dev = g_list_nth_data( devs, d );
      fprintf( stderr, "Using device %s",
               (gchar *)nw_get_attr( dev , "device" ));
      if ( nw_get_attr( dev , "mountpoint" ) != NULL ) {
        fprintf( stderr, " (mounted at %s)",
                 (gchar *)nw_get_attr( dev , "mountpoint" ));
      }
      fprintf( stderr, "\n" );
    }
    newtrack = atoi( argv[1] );
  } else {
    dev = nw_dev_init( argv[1], NW_GUESS );
    newtrack = atoi( argv[2] );
  }

  if ( !newtrack ) {
    usage();
  }

  if ( dev != NULL ) {
    fprintf( stderr, "trying to delete track %d\n", newtrack );
    newtrack = nw_del_track( dev, newtrack );
    if ( newtrack ) {
      fprintf( stderr, "deleted %d\n", newtrack );
    } else {
      fprintf( stderr, "failed: %s\n", strerror( errno ));
    }

    /* check the device for empty folders */
    STARTOVER:
    {
      GList *node = nw_get_folderlist( dev );
      guint16 folder = 0;

      while( node ) {
        nw_folder_t *fptr = node->data;
        folder++;

        if ( g_list_length( nw_get_folder_tracklist( fptr )) == 0 ) {
          fprintf( stderr, "deleting empty folder\n" );
          nw_del_folder( dev, folder );
          goto STARTOVER; /* index will be out of whack otherwise */
        }

        node = g_list_next( node );
      }
    }

    nw_dev_free( dev );
  }

  return 0;
}


