#include <amxmodx>
#include <codmod>
#include <ColorChat>
#include <cstrike>

new const PREFIX[] = "Rynek"

native cod_set_user_coins(id, wartosc);
native cod_get_user_coins(id);

#define MAX_VALUE 100 ///maxymalna cena za perk

enum e_Player {
	PLAYER_PERK_ID,
	PLAYER_PERK_PRICE,
	PLAYER_PERK_NAME[33]
}

new iPlayer[33][e_Player];
new id2[33];
new ilosc_ofert;

public plugin_init() {
	register_plugin("CoD Rynek", "1.2", "MAGNET (pomoc - GT Team)");
	
	register_clcmd("say /rynek", "Rynek");
	register_clcmd("cena", "Wystawienie");

}

public client_connect(id)
{
	iPlayer[id][PLAYER_PERK_PRICE] = 0;
	iPlayer[id][PLAYER_PERK_ID] = 0;
	iPlayer[id][PLAYER_PERK_NAME] = 0;
}

public Rynek(id)
{
	new tytul[128];
	
	formatex(tytul, charsmax(tytul), "\r[\yRynek\r]\d Menu");
	new menu = menu_create(tytul, "Rynek_Handler");
	new cb = menu_makecallback("Rynek_Callback");
	
	if(!cod_get_user_perk(id))
	formatex(tytul, charsmax(tytul), "Nie masz zadnego Perku do wystawienia");
	else if(iPlayer[id][PLAYER_PERK_ID])
	formatex(tytul, charsmax(tytul), "Wystawiles juz Perk");
	else if(cod_get_user_perk(id) && !iPlayer[id][PLAYER_PERK_ID])
	formatex(tytul, charsmax(tytul), "Wystaw Perk");
	menu_additem(menu, tytul, _, _, cb);
	formatex(tytul, charsmax(tytul), "%s", ilosc_ofert ? "Kup Perk" : "Brak Ofert Kupna");
	menu_additem(menu, tytul, _, _, cb);
	formatex(tytul, charsmax(tytul), "Usun Perk z Rynku");
	menu_additem(menu, tytul, _, _, cb);
	
	menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER);
	menu_setprop(menu, MPROP_EXIT, 0);
	menu_display(id, menu);
	
	return PLUGIN_CONTINUE;
}

public Rynek_Handler(id, menu, item)
{

	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	switch(item)
	{
		case 0: Rynek_Sprzedaz(id);
		case 1:	Rynek_Kupno(id);
		case 2:	Rynek_Usun(id);
	}
	
	return PLUGIN_CONTINUE;
}

public Rynek_Callback(id, menu, item)
{
	if((item == 0 && (!cod_get_user_perk(id) || iPlayer[id][PLAYER_PERK_ID])) || item == 1 && !ilosc_ofert || item == 2 && !iPlayer[id][PLAYER_PERK_ID])
	return ITEM_DISABLED;
	
	return ITEM_ENABLED;
}

public Rynek_Sprzedaz(id)
{
	if(!cod_get_user_perk(id))
	{
		client_print(id, print_center, "Nie masz zadnego perku!");
		Rynek(id);
		return PLUGIN_CONTINUE;
	}
	
	if(iPlayer[id][PLAYER_PERK_ID])
	{
		client_print(id, print_center, "Mozesz wystawic tylko 1 Perk!");
		Rynek(id);
		return PLUGIN_CONTINUE;
	}
	client_print(id, print_center, "Podaj cene:");
	client_cmd(id, "messagemode cena");
	
	return PLUGIN_CONTINUE;
}

public Wystawienie(id)
{
	new szIle[5], ile;
	new nick[33];
	
	get_user_name(id, nick, 32);
	
	read_argv(1, szIle, charsmax(szIle));
	remove_quotes(szIle);
	
	ile = str_to_num(szIle);

	if(!(0 < ile <= MAX_VALUE))
	{
		client_print(id, print_center, "Niepoprawna wartosc (MIN. %i)", MAX_VALUE)
		Rynek(id);
		return PLUGIN_CONTINUE;
	}
	
	iPlayer[id][PLAYER_PERK_PRICE] = ile;
	iPlayer[id][PLAYER_PERK_ID] = cod_get_user_perk(id);
	
	
	cod_get_perk_name(cod_get_user_perk(id), iPlayer[id][PLAYER_PERK_NAME],  32);
	cod_set_user_perk(id, 0);
	
	client_print(id, print_center, "Wystawiles Perk na rynku");
	ColorChat(0, GREEN, "[%s]^x01 Gracz^x03 %s^x01 wystawil Perk^x03 %s^x01 na rynku za^x03 %i Monet", PREFIX, nick, iPlayer[id][PLAYER_PERK_NAME], ile);
	
	ilosc_ofert++;
	
	return PLUGIN_CONTINUE;
	
}

public Rynek_Kupno(id)
{
	new tytul[128];
	
	formatex(tytul, charsmax(tytul), "\yDostepne Oferty:");
	new menu = menu_create(tytul, "Rynek_Kupno_Handler");
	
	for(new i=1;i<32;i++)
	{
		if(!iPlayer[i][PLAYER_PERK_ID] || !is_user_connected(i)) 
		continue;
		
		new szData[4]
		new name[33];
		num_to_str(i, szData, 3)

		get_user_name(i, name, 32);
		formatex(tytul, charsmax(tytul), "%s\y [%s]\w Cena:\r [%i Monet]", name, iPlayer[i][PLAYER_PERK_NAME],iPlayer[i][PLAYER_PERK_PRICE]);
		menu_additem(menu, tytul, szData);

	}
	
	menu_setprop(menu, MPROP_BACKNAME, "Wstecz");
	menu_setprop(menu, MPROP_NEXTNAME, "Dalej");
	menu_setprop(menu, MPROP_EXIT, "Wyjscie");
	menu_display(id, menu);
	
	return PLUGIN_CONTINUE;
}

public Rynek_Kupno_Handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	new acces,cb, szData[4], szName[2]
	menu_item_getinfo(menu, item, acces, szData, 3, szName, 1, cb)
	
	id2[id] = str_to_num(szData)

	
	if(!is_user_connected(id2[id]))
	{
		client_print(id, print_center, "Sprzedajacy nie jest polaczony")
		Rynek_Kupno(id);
		return PLUGIN_CONTINUE;
	}
	
	if(!iPlayer[id2[id]][PLAYER_PERK_ID])
	{
		client_print(id, print_center, "Perk zostal juz kupiony");
		Rynek_Kupno(id);
		return PLUGIN_CONTINUE;
	}
	
	new tytul[128];
	new opis[64];
	new name[33];
	
	get_user_name(id2[id], name, 32);
	
	cod_get_perk_desc(iPlayer[id2[id]][PLAYER_PERK_ID], opis, charsmax(opis));
	
	formatex(tytul, charsmax(tytul), "Potwierdzenie kupna Perku od %s", name);
	new menu = menu_create(tytul, "Rynek_Kupno_Potwierdzenie");
	new cbb = menu_makecallback("CallBack")
	format(tytul, charsmax(tytul), "Perk : \r[%s]", iPlayer[id2[id]][PLAYER_PERK_NAME]);
	menu_additem(menu, tytul, _, _, cbb);
	format(tytul, charsmax(tytul), "Opis : \r[%s]^n^n\wCzy chcesz kupic ten Perk?", opis)
	menu_additem(menu, tytul, _, _, cbb);
	menu_additem(menu, "Tak");
	menu_additem(menu, "Nie");

	
	menu_setprop(menu, MPROP_EXIT, 0);
	menu_display(id, menu);
	
	return PLUGIN_CONTINUE;
	
}

public Rynek_Kupno_Potwierdzenie(id, menu, item)
{
	if(item == MENU_EXIT || item == 3)
	{
		Rynek_Kupno(id);
		return PLUGIN_HANDLED;
	}
	
	
	if(!is_user_connected(id2[id]))
	{
		client_print(id, print_center, "Sprzedajacy nie jest polaczony");
		Rynek_Kupno(id);
		return PLUGIN_CONTINUE;
	}
	
	if(!iPlayer[id2[id]][PLAYER_PERK_ID])
	{
		client_print(id, print_center, "Perk zostal juz kupiony");
		Rynek_Kupno(id);
		return PLUGIN_CONTINUE;
	}

	if(cod_get_user_coins(id) < iPlayer[id2[id]][PLAYER_PERK_PRICE])
	{
		Rynek_Kupno(id);
		client_print(id, print_center, "Masz za malo monet!");
	}
	else
	{
		new nick[33];
		get_user_name(id, nick, 32);
		cod_set_user_coins(id, cod_get_user_coins(id) - iPlayer[id2[id]][PLAYER_PERK_PRICE]);
		cod_set_user_coins(id2[id], cod_get_user_coins(id2[id]) +iPlayer[id2[id]][PLAYER_PERK_PRICE]);
		
		cod_set_user_perk(id, iPlayer[id2[id]][PLAYER_PERK_ID]);
		
		ColorChat(id, GREEN, "[%s]^x01 Perk zakupiony pomyslnie", PREFIX);
		ColorChat(id2[id], GREEN, "[%s]^x01 Twoj perk zostal zakupiony przez^x03 %s. Otrzymujesz^x03 %i Monet", PREFIX, nick, iPlayer[id2[id]][PLAYER_PERK_PRICE]);
		iPlayer[id2[id]][PLAYER_PERK_PRICE] = 0;
		iPlayer[id2[id]][PLAYER_PERK_ID] = 0;
		iPlayer[id2[id]][PLAYER_PERK_NAME] = 0;
		
	}
	
	if(ilosc_ofert)	ilosc_ofert--;
	return PLUGIN_CONTINUE;
}

public CallBack(id, menu, item)
{
	if(item == 0 || item == 1)	return ITEM_DISABLED
	return ITEM_DISABLED;
}

public Rynek_Usun(id)
{
	new tytul[64];
	
	formatex(tytul, charsmax(tytul), "\yNa pewno chcesz usunac Perk z Rynku?");
	new menu = menu_create(tytul, "Rynek_Usun_Handler");
	
	formatex(tytul, charsmax(tytul), "Tak");
	menu_additem(menu, tytul);
	formatex(tytul, charsmax(tytul), "Nie");
	menu_additem(menu, tytul);
	
	menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER);
	menu_setprop(menu, MPROP_EXIT, 0);
	menu_display(id, menu);
	
	return PLUGIN_CONTINUE;
}

public Rynek_Usun_Handler(id, menu, item)
{

	if(item == MENU_EXIT || item == 1)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	iPlayer[id][PLAYER_PERK_PRICE] = 0;
	iPlayer[id][PLAYER_PERK_ID] = 0;
	iPlayer[id][PLAYER_PERK_NAME] = 0;
	ColorChat(id, GREEN, "[%s]^x01 Perk pomyslnie usuniety z rynku.", PREFIX)
	Rynek(id);
	
	return PLUGIN_CONTINUE;
}	
