/*
    SPAWN VEHICLE FOR FACTION
*/

#include <YSI_Coding\y_hooks>

// #define MAX_GROUP_VEHICLES          (50)

// enum E_GROUP_VEHICLES
// {
//     gv_model,
//     gv_stock,
//     gv_rank
// }

// new groupVehicles[MAX_GROUP_VEHICLES][E_GROUP_VEHICLES],
//     Iterator:groupCars[MAX_GROUPS]<MAX_GROUP_VEHICLES>;

// enum E_GROUP_SVF
// {
//     svf_pickup,
//     Text3D:svf_label
// }

// new groupSpawnVehicles[MAX_GROUPS][E_GROUP_SVF];

// new Float:svfSpawns[10][4] = {
//     {1555.5061, -1627.8893, 13.3828, 90.0},
//     {624.4894, -600.1357, 16.9430, 270.0},
//     {1185.0801, -1339.0421, 13.5751, 270.0},
//     {642.6106, -1347.7045, 13.3828, 0.0},
//     {1071.6589, -306.1023, 73.9922, 180.0},
//     {2505.5625, -1683.5906, 13.5469, 0.0},
//     {2217.1172, -1332.3252, 23.9844, 180.0},
//     {1882.7488, -2024.3737, 13.3906, 180.0},
//     {2353.7327, -1161.7859, 27.4534, 90.0},
//     {1279.7919, -1298.9889, 13.3439, 180.0}
// };

// new groupVehicleColors[10][2] = {
//     {1, 0},
//     {198, 198},
//     {181, 183},
//     {171, 169},
//     {224, 224},
//     {234, 235},
//     {233, 232},
//     {135, 135},
//     {6, 194},
//     {154, 154}
// };

// new tempGroupVehicles[MAX_PLAYERS][7];

hook OnVehicleDeath(vehicleid, killerid)
{
    if(IsValidDynamicObject(Siren_Object[vehicleid]))
    {
        DestroyDynamicObject(Siren_Object[vehicleid]);
    }

    Siren_Object[vehicleid] = INVALID_OBJECT_ID;
}

hook OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    if(Vehicles[vehicleid][vType] == 7 && !ispassenger)
    {
        if((Vehicles[vehicleid][vPersonal] != playerVariables[playerid][pGroup]) || (Vehicles[vehicleid][vGroupRank] > playerVariables[playerid][pGroupRank]))
        {
            new Float:x, Float:y, Float:z;
            GetPlayerPos(playerid, x, y, z);
            SetPlayerPos(playerid, x, y, z + 3);

            SCM(playerid, COLOR_GREY, "Error: "EMBED_WHITE"You are not allowed to enter in this vehicle.");
            return;
        }
    }
}

hook OnPlayerStateChange(playerid, newstate, oldstate)
{
    if(newstate == PLAYER_STATE_DRIVER)
    {
        new vehicleid = GetPlayerVehicleID(playerid);
        if(Vehicles[vehicleid][vType] == 7)
        {
            if((Vehicles[vehicleid][vPersonal] != playerVariables[playerid][pGroup]) || (Vehicles[vehicleid][vGroupRank] > playerVariables[playerid][pGroupRank]))
            {
                new Float:x, Float:y, Float:z;
                GetPlayerPos(playerid, x, y, z);
                SetPlayerPos(playerid, x, y, z + 3);

                SCM(playerid, COLOR_GREY, "Error: "EMBED_WHITE"You are not allowed to enter in this vehicle.");
                return;
            }
        }
    }
}

// CB:CreateGroupSVF()
// {
//     foreach(new g : server_groups)
//     {
//         groupSpawnVehicles[g][svf_pickup] = CreateDynamicPickup(19133, 23, svfSpawns[g - 1][0], svfSpawns[g - 1][1], svfSpawns[g - 1][2], 0, 0, -1, 20.0, -1, 0);
    
//         gString[0] = EOS;
//         format(gString, sizeof(gString), ""EMBED_SERVER"%s vehicles\n"EMBED_WHITE"Type /svf to get a vehicle.", groupVariables[g][gName]); 
        
//         groupSpawnVehicles[g][svf_label] = CreateDynamic3DTextLabel(gString, -1, svfSpawns[g - 1][0], svfSpawns[g - 1][1], svfSpawns[g - 1][2], 15.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0);
    
//         #if defined LOCALHOST
//         printf("[LOADING] SVF - [group:%d] [pickup:%d]", g, groupSpawnVehicles[g][svf_pickup]);
//         #endif
//     }
//     return 1;
// }

// CB:LoadGroupVehicles()
// {
//     inline load_group_vehicles()
//     {
//         new id, group;
//         for(new x; x < cache_num_rows(); x++)
//         {
//             cache_get_value_name_int(x, "id", id);
//             cache_get_value_name_int(x, "model", groupVehicles[id][gv_model]);
//             cache_get_value_name_int(x, "stock", groupVehicles[id][gv_stock]);
//             cache_get_value_name_int(x, "rank", groupVehicles[id][gv_rank]);
//             cache_get_value_name_int(x, "group", group);

//             Iter_Add(groupCars[group], id);

//             #if defined LOCALHOST
//             printf("[LOADING] #%d: [model:%d] [rank:%d] [group:%d]", id, groupVehicles[id][gv_model], groupVehicles[id][gv_rank], group);
//             #endif
//         }   
//     }

//     MySQL_PQueryInline(SQL, using inline load_group_vehicles, "SELECT * FROM `server_groups_cars`", "");
//     return 1;
// }

// CB:OnGroupVehicleDeath(vehicleid)
// {
//     if(Vehicles[vehicleid][vType] == 7)
//     {
//         new model = GetVehicleModel(vehicleid);

//         foreach(new car : groupCars[Vehicles[vehicleid][vPersonal]])
//         {
//             if(groupVehicles[car][gv_model] == model) groupVehicles[car][gv_stock] ++;
//         }
//     }

//     return 1;
// }

stock CreateGroupVehicle(model, Float:x, Float:y, Float:z, Float:angle, group, rank, color1 = 0, color2 = 0)
{
    new bool:siren;
    if(model == 411 && groupVariables[group][gType] == 1) siren = true;

    new vehicleid = CreateVehicleEx(model, x, y, z, angle, color1, color2, 7, group, 600, siren);
    Vehicles[vehicleid][vGroupRank] = rank;
    
    if(siren)
    {
        if(IsValidDynamicObject(Siren_Object[vehicleid]))
        {
            DestroyDynamicObject(Siren_Object[vehicleid]);
        }

        Siren_Object[vehicleid] = CreateDynamicObject(19420, 0.0, 0.0, -10.0, 0.0, 0.0, 0.0, 0, 0, -1, 50.0, 50.0, -1);
        AttachDynamicObjectToVehicle(Siren_Object[vehicleid], vehicleid, 0.0, -0.2, 0.7, 0.0, 0.0, 0.0);
    }

    return vehicleid;
}

// CB:DIALOG_SVF(playerid, dialogid, response, listitem, inputtext[])
// {
//     if(!response) return 1;

//     new car = tempGroupVehicles[playerid][listitem], group = playerVariables[playerid][pGroup];

//     if(car != 0)
//     {
//         if(group < 1)
//         {
//             return 1;
//         }

//         if(groupVehicles[car][gv_stock] < 1)
//         {
//             return SCM(playerid, COLOR_GREY, "Error: "EMBED_WHITE"No vehicles by this type available.");
//         }

//         if(playerVariables[playerid][pGroupRank] < groupVehicles[car][gv_rank])
//         {
//             return SCM(playerid, COLOR_GREY, "Error: "EMBED_WHITE"You don't have rank %d+.", groupVehicles[car][gv_rank]);
//         }

//         new Float:X, Float:Y, Float:Z;
//         GetPlayerPos(playerid, X, Y, Z);

//         new vehicleid = CreateGroupVehicle(groupVehicles[car][gv_model], X, Y, Z, svfSpawns[group - 1][3], group);
//         PutPlayerInVehicleEx(playerid, vehicleid, 0);

//         new plate[16];
//         format(plate, 16, "BRO %02d", vehicleid);
//         SetVehicleNumberPlate(vehicleid, plate);

//         groupVehicles[car][gv_stock]--;

//         gString[0] = EOS;
//         format(gString, sizeof(gString), "Faction vehicles: %s has spawned a %s - %d left.", GetName(playerid), vehNames[groupVehicles[car][gv_model] - 400], groupVehicles[car][gv_stock]);
//         SendGroupMessage(group, COLOR_PINK, gString);

//         SetPVarInt(playerid, "svf_delay", gettime() + 120);
//     }
//     return 1;
// }

// CMD:svf(playerid, params[])
// {
//     if(playerVariables[playerid][pGroup] == 0)
//     {
//         return SCM(playerid, COLOR_GREY, "Error: "EMBED_WHITE"You are not in a faction.");
//     }

//     #if defined SERVER_1
//     if(GetPVarInt(playerid, "svf_delay") > gettime())
//     {
//         return SCM(playerid, COLOR_GREY, "Error: "EMBED_WHITE"You need to wait %d seconds before you can spawn another vehicle.", GetPVarInt(playerid, "svf_delay") - gettime());
//     }
//     #endif

//     new group = playerVariables[playerid][pGroup];
//     if(IsPlayerInRangeOfPoint(playerid, 5.0, svfSpawns[group - 1][0], svfSpawns[group - 1][1], svfSpawns[group - 1][2]))
//     {
//         for(new x; x < 7; x++) tempGroupVehicles[playerid][x] = 0;

//         new dialog[1024] = "Vehicle\tRank\tAvailable\n";
//         foreach(new car : groupCars[group])
//         {
//             format(dialog, sizeof(dialog), "%s%s [model:%d]\t[rank:%d]\t%d left\n", dialog, vehNames[groupVehicles[car][gv_model] - 400], groupVehicles[car][gv_model], groupVehicles[car][gv_rank], groupVehicles[car][gv_stock]);
//             for(new x; x < 7; x++)
//             {
//                 if(tempGroupVehicles[playerid][x] == 0)
//                 {
//                     tempGroupVehicles[playerid][x] = car;
//                     break;
//                 }
//             }
//         }

//         return ShowDialog(playerid, DIALOG_SVF, DIALOG_STYLE_TABLIST_HEADERS, ""EMBED_DIALOG"Spawn faction vehicle", dialog, "Select", "Exit");
//     }

//     return 1;
// }

CB:OnFactionVehicleCreated(playerid, model, group, rank, color1, color2)
{
    new Float:X, Float:Y, Float:Z, Float:Rot;
    GetPlayerPos(playerid, X, Y, Z);
    GetPlayerFacingAngle(playerid, Rot);

    new id = cache_insert_id();
    SendAdminMessage(COLOR_ADMIN, "Admin %s created vehicle %s [dbid:%d] for group %s [group:%d] [rank:%d].", GetName(playerid), vehNames[model-400], id, groupVariables[group][gName], group, rank);

    CreateGroupVehicle(model, X, Y, Z, Rot, group, rank, color1, color2);
    return 1;
}

CMD:facveh(playerid, params[])
{
    check_owner

    if(IsPlayerInAnyVehicle(playerid)) return SCM(playerid, COLOR_GREY, "Error: "EMBED_WHITE"You can't use this command while you are in a vehicle.");

    new model, group, rank, color1, color2;
    if(sscanf(params, "iiiii", model, group, rank, color1, color1)) return SCM(playerid, COLOR_GREY, "Syntax: "EMBED_WHITE"/facveh [model] [group ID] [rank] [color 1] [color 2]");
    if(group == 0 || !Iter_Contains(server_groups, group)) return SCM(playerid, COLOR_GREY, "Error: "EMBED_WHITE"Invalid group.");
    if(rank < 1 || rank > 7) return SCM(playerid, COLOR_GREY, "Error: "EMBED_WHITE"Invalid rank (1-7).");
    if((color1 < 0 || color1 > 255) || (color2 < 0 || color2 > 255)) return SCM(playerid, COLOR_GREY, "Error: "EMBED_WHITE"Invalid color.");

    new Float:X, Float:Y, Float:Z, Float:Rot;
    GetPlayerPos(playerid, X, Y, Z);
    GetPlayerFacingAngle(playerid, Rot);

    gQuery[0] = EOS;
    mysql_format(SQL, gQuery, sizeof(gQuery), "INSERT INTO `server_vehicles` (`vehicleModel`, `vehicleGroup`, `vehicleGroupRank`, `vehicleColor1`, `vehicleColor2`, `vehiclePosX`, `vehiclePosY`, `vehiclePosZ`, `vehicleAngle`) VALUES ('%d', '%d', '%d', '%d', '%d', '%f', '%f', '%f', '%f')", model, group, rank, color1, color2, X, Y, Z, Rot);
    mysql_tquery(SQL, gQuery, "OnFactionVehicleCreated", "iiiiii", playerid, model, group, rank, color1, color2);
    return 1;
}