/*
===========================================================================
Copyright (C) 2015-2019 Project Meteor Dev Team
This file is part of Project Meteor Server.
Project Meteor Server is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Project Meteor Server is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with Project Meteor Server. If not, see .
===========================================================================
*/
using Meteor.Common;
using Meteor.Map.Actors;
using Meteor.Map.lua;
using Meteor.Map.packets.send.actor;
using System.Collections.Generic;
namespace Meteor.Map.actors.area
{
    class PrivateArea : Area    
    {
        private readonly Zone ParentZone;
        private readonly string PrivateAreaName;
        private readonly int PrivateAreaType;
        private readonly bool CanExitArea;
        public PrivateArea(Zone parent, string classPath, string privateAreaName, int privateAreaType, bool canExitArea, ushort music)
            : base(parent.ZoneId, parent.ZoneName, parent.RegionId, classPath, music, music, music, parent.isIsolated, parent.isInn, parent.canRideChocobo, parent.canStealth, true)
        {
            this.ParentZone = parent;
            this.PrivateAreaName = privateAreaName;
            this.PrivateAreaType = privateAreaType;
        }
        public override string GetPrivateAreaName()
        {
            return PrivateAreaName;
        }
        public override int GetPrivateAreaType()
        {
            return PrivateAreaType;
        }
        public bool CanExitPrivateArea()
        {
            return CanExitArea;
        }
        public override bool IsPublic()
        {
            return false;
        }
        public Zone GetParentZone()
        {
            return ParentZone;
        }
        public override SubPacket CreateScriptBindPacket()
        {
            List lParams;
            string path = className;
            string realClassName = className.Substring(className.LastIndexOf("/") + 1);
            lParams = LuaUtils.CreateLuaParamList(classPath, false, true, ZoneName, PrivateAreaName, PrivateAreaType, canRideChocobo ? (byte)1 : (byte)0, canStealth, isInn, false, false, false, false, false, false);
            ActorInstantiatePacket.BuildPacket(Id, Name, realClassName, lParams).DebugPrintSubPacket();
            return ActorInstantiatePacket.BuildPacket(Id, Name, realClassName, lParams);
        }
        public void AddSpawnLocation(SpawnLocation spawn)
        {
            mSpawnLocations.Add(spawn);
        }
        public void SpawnAllActors()
        {
            foreach (SpawnLocation spawn in mSpawnLocations)
                SpawnActor(spawn);
        }
    }
}