/* vim: set sw=3 ts=3 sts=3 expandtab: */
#include "ecdb.h"

int ecdb_project_init(Ecdb_Project *proj);
int ecdb_burn_project_init(Ecdb_Burn_Project *proj);
int ecdb_erase_project_init(Ecdb_Erase_Project *proj);
int ecdb_audio_project_init(Ecdb_Audio_Project *proj);
int ecdb_data_project_init(Ecdb_Data_Project *proj);
int ecdb_image_project_init(Ecdb_Image_Project *proj);

Ecdb_Project *
ecdb_project_new(void)
{
   Ecdb_Project *proj;

   proj = calloc(1, sizeof(Ecdb_Project));
   if (!proj)
   {
      return NULL;
   }
   if (!ecdb_project_init(proj))
   {
      FREE(proj);
      return NULL;
   }
   
   return proj;
}

int
ecdb_project_init(Ecdb_Project *proj)
{
   return TRUE;
}

void
ecdb_project_destroy(Ecdb_Project *proj)
{
   if (proj->ev_handler) ecore_event_handler_del(proj->ev_handler);
   if (proj->pipe) ecore_pipe_del(proj->pipe);
   EINA_ERROR_PINFO("base\n");
}

void
ecdb_project_type_set(Ecdb_Project *proj, unsigned int t)
{
   proj->type = t;
}

Ecdb_Burn_Project *
ecdb_burn_project_new(void)
{
   Ecdb_Burn_Project *proj;

   proj = calloc(1, sizeof(Ecdb_Burn_Project));
   if (!proj)
      return NULL;

   if (!ecdb_burn_project_init(proj))
   {
      FREE(proj);
      return NULL;
   }

   return proj;
}

int
ecdb_burn_project_init(Ecdb_Burn_Project *proj)
{
   if (!ecdb_project_init(ECDB_PROJECT(proj)))
      return FALSE;

   /* Create some sane defaults */
   ecdb_project_type_set(ECDB_PROJECT(proj), ECDB_BURN_PROJECT);
   proj->burn_mode = BURN_MODE1;
   proj->fifo_chunksize = 2048;
   proj->fifo_chunks = 2048;
   proj->underrun_proof = TRUE;
   proj->files = ecdb_source_new();
   proj->opc = TRUE;
   proj->multi = TRUE;

   return TRUE;
}

void
ecdb_burn_project_destroy(Ecdb_Burn_Project *proj)
{
   EINA_ERROR_PINFO("burn\n");
   if (proj->files)
   {
      ecdb_source_destroy(proj->files);
      proj->files = NULL;
   }
   ecdb_project_destroy(ECDB_PROJECT(proj));
}

Ecdb_Erase_Project *
ecdb_erase_project_new(void)
{
   Ecdb_Erase_Project *proj;

   proj = calloc(1, sizeof(Ecdb_Erase_Project));
   if (!proj)
   {
      return NULL;
   }
   
   if (!ecdb_erase_project_init(proj))
   {
      FREE(proj);
      return NULL;
   }

   return proj;
}

int
ecdb_erase_project_init(Ecdb_Erase_Project *proj)
{
   if (!ecdb_project_init(ECDB_PROJECT(proj)))
   {
      return FALSE;
   }

   /* Proper defaults */
   ecdb_project_type_set(ECDB_PROJECT(proj), ECDB_ERASE_PROJECT);
   proj->quick = TRUE;
   proj->format = FALSE;

   return TRUE;
}

void
ecdb_erase_project_destroy(Ecdb_Erase_Project *proj)
{
   EINA_ERROR_PINFO("Destroying: erase\n");
   ecdb_project_destroy(ECDB_PROJECT(proj));
   FREE(proj);
}

Ecdb_Audio_Project *
ecdb_audio_project_new(void)
{
   Ecdb_Audio_Project *proj;

   proj = calloc(1, sizeof(Ecdb_Audio_Project));
   if (!proj)
   {
      return NULL;
   }
   if (!ecdb_audio_project_init(proj))
   {
      FREE(proj);
      return NULL;
   }

   return proj;
}

int
ecdb_audio_project_init(Ecdb_Audio_Project *proj)
{
   if (!ecdb_burn_project_init(ECDB_BURN(proj)))
   {
      return FALSE;
   }

   ecdb_project_type_set(ECDB_PROJECT(proj), ECDB_AUDIO_PROJECT);

   return TRUE;
}

void
ecdb_audio_project_destroy(Ecdb_Audio_Project *proj)
{
   EINA_ERROR_PINFO("Destroying: audio\n");
   ecdb_burn_project_destroy(ECDB_BURN(proj));
   FREE(proj);
}

Ecdb_Data_Project *
ecdb_data_project_new(void)
{
   Ecdb_Data_Project *proj;

   proj = calloc(1, sizeof(Ecdb_Data_Project));
   if (!proj)
   {
      return NULL;
   }
   if (!ecdb_data_project_init(proj))
   {
      FREE(proj);
      return NULL;
   }

   return proj;
}

int
ecdb_data_project_init(Ecdb_Data_Project *proj)
{
   if (!ecdb_burn_project_init(ECDB_BURN(proj)))
   {
      return FALSE;
   }

   ecdb_project_type_set(ECDB_PROJECT(proj), ECDB_DATA_PROJECT);
   proj->use_joliet = TRUE;
   proj->use_rockridge = TRUE;
   proj->iso_level = 3;

   return TRUE;
}

void
ecdb_data_project_destroy(Ecdb_Data_Project *proj)
{
   EINA_ERROR_PINFO("Destroying: data\n");
   FREE(proj->volume_id);
   FREE(proj->publisher_id);
   FREE(proj->data_preparer_id);
   FREE(proj->system_id);
   FREE(proj->application_id);
   FREE(proj->copywrite_id);
   FREE(proj->abstract_id);
   FREE(proj->biblio_id);
   ecdb_burn_project_destroy(ECDB_BURN(proj));
   FREE(proj);
}

Ecdb_Image_Project *
ecdb_image_project_new(void)
{
   Ecdb_Image_Project *proj;

   proj = calloc(1, sizeof(Ecdb_Image_Project));
   if (!proj)
   {
      return NULL;
   }
   if (!ecdb_image_project_init(proj))
   {
      FREE(proj);
      return NULL;
   }

   return proj;
}

int
ecdb_image_project_init(Ecdb_Image_Project *proj)
{
   if (!ecdb_burn_project_init(ECDB_BURN(proj)))
      return FALSE;

   ecdb_project_type_set(ECDB_PROJECT(proj), ECDB_IMAGE_PROJECT);

   return TRUE;
}

void
ecdb_image_project_destroy(Ecdb_Image_Project *proj)
{
   EINA_ERROR_PINFO("Destroying: image\n");
   ecdb_burn_project_destroy(ECDB_BURN(proj));
   FREE(proj);
}