#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define size_t long

EXEC SQL INCLUDE SQLCA.H;
EXEC SQL INCLUDE SQLDA.H;
EXEC SQL INCLUDE ORACA.H;

	
void connexion()
{ 	VARCHAR uid[50];
	char login[20];
	char passwd[20];
	printf("\n");
	strcpy(uid.arr,"palafour");
	strcat(uid.arr,"/");
	strcat(uid.arr,"1s;ph;;1");
	strcat(uid.arr,"@kirov");
	uid.len=strlen(uid.arr);
	EXEC SQL CONNECT :uid;
	if (sqlca.sqlcode==0)
		printf(" Connexion réussie avec succès.\n\n");
	else
		{
		printf ("Problème à la connexion.\n\n");
		exit(1);
		}
}
void deconnexion(int validation)
{
	if (validation == 1)
		{
		EXEC SQL COMMIT WORK RELEASE;
		} 
	else 
		{
		EXEC SQL ROLLBACK WORK RELEASE;
		}
	printf("\nDéconnexion sans problème.\n");
}


void sql_error(char *msg)
{
	char err_msg[128];
	long buf_len, msg_len;
	EXEC SQL WHENEVER SQLERROR CONTINUE;
	printf("%s\n", msg);
	buf_len = sizeof (err_msg);
	sqlglm(err_msg, &buf_len, &msg_len);
	if (msg_len > buf_len)
		msg_len = buf_len;
	printf("%.*s\n", msg_len, err_msg);
	deconnexion(0);
	exit(1);
}


void traitErreur(char *msg)
{	
	EXEC SQL WHENEVER SQLERROR CONTINUE;
	printf("%s\n", msg);
	deconnexion(0);
	exit(1);
}


int main(int argc, char** argv)
{
char vidperso[20];
char vidfonction[20];
char vidhopital[6];
VARCHAR vnom[20];
VARCHAR vprenom[20];
char eidperso[20];
char eidfonction[20];
char eidhopital[6];
VARCHAR enom[20];
VARCHAR eprenom[20];
int nbhopital=0;
int nbfonction=0;
int nbperso=1;

	
	EXEC SQL WHENEVER SQLERROR DO sql_error("Oracle error\n");
	printf("\n Appel de la fonction connexion");
	connexion();
	printf("\n Appel de la fonction deconnexion");
	
	/*----------------------------------lecture----------------------------*/
	EXEC SQL WHENEVER SQLERROR DO sql_error("Oracle error\n");

	printf("Saisir un nouveau personnel \n");
	printf("Entrer son nom  : ");
	scanf("%s",vnom.arr);
	vnom.len=strlen(vnom.arr);
	printf("Entrer son prenom  : ");
	scanf("%s",vprenom.arr);
	vprenom.len=strlen(vprenom.arr);

	do{
	printf("Entrer son id hopital : ");
	scanf("%s",vidhopital);
	EXEC SQL SELECT COUNT(*) INTO :nbhopital FROM HOPITAL WHERE id_hopital=:vidhopital;
	//printf("nbhopital %d\n",nbhopital);
	}
	while (nbhopital !=1);

	do{
	printf("Entrer son id personnel : ");
	scanf("%s",vidperso);
	EXEC SQL SELECT COUNT(*) INTO :nbperso FROM PERSONNEL WHERE id_personnel=:vidperso;
	if (nbperso==1){
	   printf("Ce numero de personnel existe deja\n");
	   EXEC SQL SELECT * INTO :eidperso, :eidfonction, :eidhopital, :enom, :eprenom  FROM PERSONNEL WHERE id_personnel=:vidperso;
	   printf("ID PERSO : %s \n",eidperso);
	   printf("ID FONCTION : %s \n",eidfonction);
	   printf("ID HOPITAL : %s \n",eidhopital);
	   printf("NOM : %s \n",enom.arr);
	   printf("PRENOM : %s \n",eprenom.arr);
	   }
	}
	while (nbperso !=0);

	do{
	printf("Entrer son id fonction : ");
	scanf("%s",vidfonction);
	EXEC SQL SELECT COUNT(*) INTO :nbfonction FROM FONCTION WHERE id_fonction=:vidfonction;
	}
	while (nbfonction !=1);

	EXEC SQL INSERT INTO PERSONNEL VALUES (:vidperso,:vidfonction,:vidhopital,:vnom,:vprenom);

	EXEC SQL COMMIT;


	deconnexion(1);
	return(0);
}


