#ifndef COMMANDS_H
#define COMMANDS_H

#include "irc_client.h"

typedef struct {
    char *command;
    char *alias;
    char *syntax;
    char *description;
    void (*handler)(irc_client_t *client, const char *args);
} irc_command_t;

// Command processor
int process_command(irc_client_t *client, const char *input);
const irc_command_t *find_command(const char *name);
void show_command_help(const char *command_name);
void show_all_help(void);

// Command handlers
void cmd_help(irc_client_t *client, const char *args);
void cmd_join(irc_client_t *client, const char *args);
void cmd_part(irc_client_t *client, const char *args);
void cmd_msg(irc_client_t *client, const char *args);
void cmd_privmsg(irc_client_t *client, const char *args);
void cmd_notice(irc_client_t *client, const char *args);
void cmd_nick(irc_client_t *client, const char *args);
void cmd_quit(irc_client_t *client, const char *args);
void cmd_names(irc_client_t *client, const char *args);
void cmd_who(irc_client_t *client, const char *args);
void cmd_whois(irc_client_t *client, const char *args);
void cmd_list(irc_client_t *client, const char *args);
void cmd_topic(irc_client_t *client, const char *args);
void cmd_mode(irc_client_t *client, const char *args);
void cmd_kick(irc_client_t *client, const char *args);
void cmd_ban(irc_client_t *client, const char *args);
void cmd_op(irc_client_t *client, const char *args);
void cmd_voice(irc_client_t *client, const char *args);
void cmd_deop(irc_client_t *client, const char *args);
void cmd_devoice(irc_client_t *client, const char *args);
void cmd_away(irc_client_t *client, const char *args);
void cmd_back(irc_client_t *client, const char *args);
void cmd_ignore(irc_client_t *client, const char *args);
void cmd_unignore(irc_client_t *client, const char *args);
void cmd_version(irc_client_t *client, const char *args);
void cmd_time(irc_client_t *client, const char *args);
void cmd_ping(irc_client_t *client, const char *args);
void cmd_motd(irc_client_t *client, const char *args);
void cmd_stats(irc_client_t *client, const char *args);
void cmd_admin(irc_client_t *client, const char *args);
void cmd_info(irc_client_t *client, const char *args);
void cmd_links(irc_client_t *client, const char *args);
void cmd_clear(irc_client_t *client, const char *args);
void cmd_me(irc_client_t *client, const char *args);
void cmd_action(irc_client_t *client, const char *args);
void cmd_slap(irc_client_t *client, const char *args);
void cmd_status(irc_client_t *client, const char *args);
void cmd_query(irc_client_t *client, const char *args);
void cmd_close(irc_client_t *client, const char *args);
void cmd_invite(irc_client_t *client, const char *args);
void cmd_kill(irc_client_t *client, const char *args);
void cmd_oper(irc_client_t *client, const char *args);
void cmd_nickserv(irc_client_t *client, const char *args);
void cmd_chanserv(irc_client_t *client, const char *args);
void cmd_memoserv(irc_client_t *client, const char *args);
void cmd_botserv(irc_client_t *client, const char *args);
void cmd_hostserv(irc_client_t *client, const char *args);
void cmd_ns(irc_client_t *client, const char *args);
void cmd_cs(irc_client_t *client, const char *args);
void cmd_ms(irc_client_t *client, const char *args);
void cmd_theme(irc_client_t *client, const char *args);
void cmd_reconnect(irc_client_t *client, const char *args);
void cmd_filter(irc_client_t *client, const char *args);
void cmd_alias(irc_client_t *client, const char *args);
void cmd_dcc(irc_client_t *client, const char *args);
void cmd_proxy(irc_client_t *client, const char *args);
void cmd_ipv6(irc_client_t *client, const char *args);
void cmd_cert(irc_client_t *client, const char *args);
void cmd_network(irc_client_t *client, const char *args);

#endif