001package com.fs.starfarer.api.characters;
002
003import java.util.List;
004import java.util.Random;
005import java.util.Set;
006
007import com.fs.starfarer.api.campaign.FactionAPI;
008import com.fs.starfarer.api.campaign.SectorEntityToken;
009import com.fs.starfarer.api.campaign.econ.MarketAPI;
010
011public interface ImportantPeopleAPI {
012        
013        public interface PersonFilter {
014                boolean accept(PersonDataAPI personData);
015        }
016        
017        public interface PersonDataAPI {
018                PersonLocationAPI getLocation();
019                void setLocation(PersonLocationAPI location);
020                PersonAPI getPerson();
021                Set<String> getCheckedOutFor();
022        }
023        
024        public interface PersonLocationAPI {
025                MarketAPI getMarket();
026                void setMarket(MarketAPI market);
027                SectorEntityToken getEntity();
028                void setEntity(SectorEntityToken entity);
029                boolean isInMarket();
030                boolean isOnFleet();
031        }
032
033        void addPerson(PersonAPI person);
034        
035        boolean containsPerson(PersonAPI person);
036        void removePerson(PersonAPI person);
037        void removePerson(String id);
038        
039        List<PersonDataAPI> getPeopleCopy();
040        List<PersonAPI> getPeopleWithRank(String rankId);
041        List<PersonAPI> getPeopleWithPost(String postId);
042        
043        PersonDataAPI getData(PersonAPI person);
044        PersonDataAPI getData(String id);
045        PersonAPI getPerson(String id);
046        
047        boolean canCheckOutPerson(PersonAPI person, String reasonId);
048        void checkOutPerson(PersonAPI person, String reasonId);
049        void returnPerson(PersonAPI person, String reasonId);
050
051        List<PersonDataAPI> getMatching(PersonFilter filter);
052
053        PersonDataAPI getPerson(FactionAPI faction, MarketAPI market,
054                        String checkoutReason, String defaultRank, String ... postIds);
055
056        PersonDataAPI getPerson(String factionId, MarketAPI market,
057                        String checkoutReason, String defaultRank, String ... postIds);
058
059        boolean isCheckedOutForAnything(PersonAPI person);
060
061        PersonDataAPI getPerson(Random random, FactionAPI faction,
062                        MarketAPI market, String checkoutReason, String defaultRank,
063                        String... postIds);
064
065        boolean isLastGetPersonResultWasExistingPerson();
066
067        void excludeFromGetPerson(PersonAPI person);
068        void resetExcludeFromGetPerson();
069
070        
071        
072}