static public int counterSpellRestriction(SpellAbility sa) {
        // Move this to AF?
        // Restriction Level is Based off a handful of factors

        int restrict = 0;

        Card source = sa.getSourceCard();
        Target tgt = sa.getTarget();
        AbilityFactory af = sa.getAbilityFactory();
        HashMap<String, String> params = af.getMapParams();

        // Play higher costing spells first?
        Cost cost = sa.getPayCosts();
        // Convert cost to CMC
        //String totalMana = source.getSVar("PayX"); // + cost.getCMC()

        // Consider the costs here for relative "scoring"
        if (cost.getDiscardType().equals("Hand")) {
            // Null Brooch aid
            restrict -= (AllZoneUtil.getPlayerHand(AllZone.getComputerPlayer()).size() * 20);
        }

        // Abilities before Spells (card advantage)
        if (af.isAbility())
            restrict += 40;

        // TargetValidTargeting gets biggest bonus
        if (tgt.getSAValidTargeting() != null) {
            restrict += 35;
        }

        // Unless Cost gets significant bonus + 10-Payment Amount
        String unless = params.get("UnlessCost");
        if (unless != null) {
            int amount = AbilityFactory.calculateAmount(source, unless, sa);

            int usableManaSources = CardFactoryUtil.getUsableManaSources(AllZone.getHumanPlayer());

            // If the Unless isn't enough, this should be less likely to be used
            if (amount > usableManaSources)
                restrict += 20 - (2 * amount);
            else
                restrict -= (10 - (2 * amount));
        }

        // Then base on Targeting Restriction
        String[] validTgts = tgt.getValidTgts();
        if (validTgts.length != 1 || !validTgts[0].equals("Card"))
            restrict += 10;

        // And lastly give some bonus points to least restrictive TargetType (Spell,Ability,Triggered)
        String tgtType = tgt.getTargetSpellAbilityType();
        restrict -= (5 * tgtType.split(",").length);

        return restrict;
    }