#!/bin/bash

# Vérifie si un nom de projet est fourni
if [ $# -eq 0 ]; then
    echo "Usage: $0 <nom_projet>"
    exit 1
fi

PROJECT_NAME=$1
SRC_DIR="src"
INC_DIR="inc"
BIN_DIR="bin"

# Crée l'arborescence du projet
mkdir -p "$PROJECT_NAME"
cd "$PROJECT_NAME" || exit
mkdir -p "$SRC_DIR" "$INC_DIR" "$BIN_DIR"

# Crée le fichier main.c
cat > "$SRC_DIR/main.c" <<EOF
#include <stdio.h>
#include <stdlib.h>
#include "${PROJECT_NAME}.h"

int main(int argc, char *argv[])
{
    printf("Hello, ${PROJECT_NAME}!\\n");
    return EXIT_SUCCESS;
}
EOF

# Crée le fichier header
cat > "$INC_DIR/${PROJECT_NAME}.h" <<EOF
#ifndef ${PROJECT_NAME^^}_H
#define ${PROJECT_NAME^^}_H

/* Prototypes des fonctions */
void ${PROJECT_NAME}_hello(void);

#endif
EOF

# Crée un fichier source supplémentaire
cat > "$SRC_DIR/${PROJECT_NAME}.c" <<EOF
#include <stdio.h>
#include "${PROJECT_NAME}.h"

void ${PROJECT_NAME}_hello(void)
{
    printf("Function from ${PROJECT_NAME}\\n");
}
EOF

# Crée le Makefile
cat > Makefile <<EOF
CC = gcc
CFLAGS = -Wall -Wextra -Iinc/
LDFLAGS =
TARGET = bin/${PROJECT_NAME}

SRC = \$(wildcard src/*.c)
OBJ = \$(patsubst src/%.c,bin/%.o,\$(SRC))

all: \$(TARGET)

\$(TARGET): \$(OBJ)
	\$(CC) \$(LDFLAGS) -o \$@ \$^

bin/%.o: src/%.c
	\$(CC) \$(CFLAGS) -c -o \$@ \$<

clean:
	rm -f bin/*.o \$(TARGET)

.PHONY: all clean
EOF

echo "Projet C '${PROJECT_NAME}' créé avec succès !"
echo "Arborescence :"
tree