#include<stdio.h>
#include<stdlib.h>
#include <string.h>

typedef struct
{
     char nombre[10];
     int codigo; 
     char descripcion[100];
     int stock;
}producto;



//1-----------------------------------------------------
void ingresar_producto(producto *product)
{
     printf("\nNombre          :");
     scanf("%s",product->nombre);
     fflush(stdin);
     printf("Codigo          :");
     scanf("%d",&product->codigo);
     fflush(stdin);
     printf("Descripcion     :");
     scanf("%s",product->descripcion);
     fflush(stdin);
     printf("Stock           :");
     scanf("%d",&product->stock);
}

long PosicionDelRegistro(FILE *p,char nombre[10])
{
     producto product;
     bool Encontrado;
     Encontrado=false;
     int CuentaRegistro=0;
     while(!feof(p) && Encontrado!=true)
     {
     CuentaRegistro++;
     fread(&product,sizeof(producto),1,p);
     if(strcmpi(product.nombre,nombre)==0)
     Encontrado=true;
     }
     if(Encontrado==true)
     return ((CuentaRegistro-1)*sizeof(producto));
     else
     return (-1);
}

void BuscarNombre(producto product)
{
     FILE *p;
     long posicion;
     char nombre[10];
     if((p=fopen("Productos.dat","rb"))==NULL)
     {
     printf("\nError al abrir el archivo");
     system("pause");
     }
     else
     {
         printf("\nNombre:");
         fflush(stdin);
         gets(nombre);
         posicion=PosicionDelRegistro(p,nombre);
         if(posicion==(-1)){
         printf("\nNo se encontro el nombre!!");
         system("pause");}
         else{
         fseek(p,posicion,SEEK_SET);
         fread(&product,sizeof(producto),1,p);
         printf("\nNombre: %s",product.nombre);
         printf("\nCodigo: %d",product.codigo);
         printf("\nDescripcion: %s",product.descripcion);
         printf("\nStock: %d",product.stock);
         system("pause");
         }   
         
     }
}



//1-----------------------------------------------------
void guardar_producto(producto product)
{
     FILE *p;
     if(!(p=fopen("Productos.dat","ab")))
     {
          printf("Error al abrir el archivo");
          system("pause");
     }
     else
   {
          fwrite(&product,sizeof(producto),1,p);
          printf("\nProductos anotados.\n");
          system("pause");
     }
     fclose(p);
}
//-----------------------------------------------------




//6-----------------------------------------------------
void generar_lista()
{
     system("cls");
     producto pro;
     FILE *p;
     FILE *list;
     p=fopen("Productos.dat","rb");
     list=fopen("Lista_productos.txt","wt");
     if(p==NULL || list==NULL)
     {
          printf("Error al abrir el archivo");
          system("pause");
     }
     else
     {
          fprintf(list,"\t\t-----Lista de productos-----\n\n");
          while(fread(&pro,sizeof(producto),1,p))
          {
              fprintf(list,"------------------------------------\n");
              fprintf(list,"Nombre      :%s\n",pro.nombre);
              fprintf(list,"Codigo      :%d\n",pro.codigo);
              fprintf(list,"Descripcion :%s\n",pro.descripcion);
              fprintf(list,"Stock       :%d\n",pro.stock);
              fprintf(list,"------------------------------------\n\n");
          }
          printf("Lista generada\n");
          system("pause");
     }
     fclose(p);
     fclose(list);
}
//-----------------------------------------------------


     
//-----------------------------------------------------
int menu()
{
     int opcion;
     system("cls");
     printf("\t\t\t\t MENU\n");
     printf("\t\t\t\t======\n\n");
     printf("\t1) Crear producto.\n");
     printf("\t2) Realizar inventario de todos los productos.\n");
     printf("\t3) Buscar.\n");
     printf("\t4) Salir.\n");
     printf("\n\tOpcion: ");
     scanf("%d",&opcion);
     return opcion;
}
//-----------------------------------------------------


int main()
{
    int opcion;
    producto product;
    do
    {
         opcion=menu();
         switch(opcion)
         {
             case 1:
             {
                   ingresar_producto(&product);
                   guardar_producto(product);
                   break;
             }
             case 2:
             {
                   generar_lista();
                   break;
             }
             case 3:
             {
             BuscarNombre(product);
             break;
             }
         }
    }while(opcion!=4);
    return 0;
}

