
// @unloadnpc referral
// @loadnpc npc/amatsu/features/referral.txt

-	script	referral	-1,{
OnInit:
	bindatcmd("referral","referral::OnCheck",0,99);
	set .rlvl,75;
	set .maxaccount,0;
	set .credits,1000;
	set .debug,0;
	end;

OnCheck:

	mes "Hello ^28bf00"+strcharinfo(0)+"^000000, here is your referral report";
	mes "^FF0000G U I D E L I N E S^000000";
	mes "- ^FF0000"+.credits+" Credits^000000 per valid referral";
	if(.maxaccount) mes "- Max of ^FF0000"+.maxaccount+"^000000 referred accounts";
	mes "- Account should reach ^FF0000Base Level "+.rlvl+"^000000 on any of his character.";
	mes "- 1 machine is valid for 1 referral only.";
	//while(1){
		query_sql("SELECT last_unique_id, name, level, redeemed FROM referral WHERE `redeemed` = 0 AND `referral_id` = "+getcharid(CHAR_ID_ACCOUNT)+" ORDER BY `level` DESC LIMIT 10", .@last_unique_id$,.@name$,.@level,.@redeemed);
		.@size = getarraysize( .@name$ );
		if( !.@size ){
			mes "You have not referred anyone yet.";
			mes "Please visit ^FF0000https://amatsuro.com/?module=referral^000000";
			mes "to start inviting friends.";
			close;
		} else {
			.@player_menu$ = "";
			for( .@i = 0; .@i < .@size; .@i++ ){
				.@player_menu$ = .@player_menu$ + ( .@i+1 )+". "+.@name$[.@i]+" Lvl [ "+.@level[.@i]+" ] - "+(.@redeemed[.@i] ? "^FF0000Claimed^000000" : "^28bf00Unclaimed^000000")+":";
			}
			set .@Select,select( .@player_menu$ ) - 1;
			set .@last_unique_id$,.@last_unique_id$[.@Select];
			set .@name$,.@name$[.@Select];
			set .@redeemed,.@redeemed[.@Select];
			set .@level,.@level[.@Select];
			if (.@redeemed) {
				dispbottom "This referral has already been claimed.";
			} else if (.@level < .rlvl) {
				dispbottom "Referred account MUST reach level "+.rlvl+" on any of his character.";
			} else if (BaseLevel < 75 ){
				dispbottom "You must be BASE LEVEL 75 to claim any referral reward.";
			} else {
				chanmsg("#system",""+strcharinfo(0)+" has claimed "+.credits+" Credit Points from the Referral System.");
				query_sql "UPDATE referral SET `redeemed` = 1, credits_before="+callfunc("F_CheckCredit")+", credits_after="+(callfunc("F_CheckCredit")+1000)+", redemption_date ='"+gettimestr("%Y-%m-%d %H:%M:%S",21)+"' WHERE `last_unique_id` = "+.@last_unique_id$;
				callfunc("F_UpdateCredit",+1000);
			}
		}
	//}
	close;

OnPCLoginEvent:
	.@isredeemed = 0;
	.@get_unique_id$ = get_unique_id;
	query_sql("SELECT `referral` FROM login WHERE `account_id` = "+getcharid(CHAR_ID_ACCOUNT),.@isref);
	if (!.@isref) end;
	/* Check if unique_id is redeemed */
	query_sql("SELECT `last_unique_id`,`redeemed`,`level` FROM referral WHERE `last_unique_id` = "+.@get_unique_id$, .@isbol, .@isredeemed,.@level);
	if(.@isredeemed) end;
	if(.@isbol){
		if(.@level < BaseLevel) { 
			query_sql "UPDATE referral SET `account_id` = "+getcharid(CHAR_ID_ACCOUNT)+", `name` = '"+strcharinfo(PC_NAME)+"', `level` = "+BaseLevel+" WHERE `last_unique_id` = "+.@get_unique_id$;
		}		
	} else {
		/* Record New Machine Entry. Hurray!!! */
		query_sql("SELECT `account_id` FROM referral WHERE `account_id` = "+getcharid(CHAR_ID_ACCOUNT),.@isaccount);
		if(.@isaccount) end;
		query_sql "INSERT INTO referral (last_unique_id, account_id, name, referral_id, redeemed, redemption_date, credits_before, credits_after, level) VALUES ("+.@get_unique_id$+","+getcharid(CHAR_ID_ACCOUNT)+",'"+strcharinfo(PC_NAME)+"',"+.@isref+",0,NULL,0,0,"+BaseLevel+")";
	}
	end;
}	 