import edu.duke.*;
import org.apache.commons.csv.*;
import java.io.File;

public class BabyBirth {
    public void printName(){
    FileResource fr = new FileResource();
    CSVParser parser = fr.getCSVParser(false);// no header file

        for(CSVRecord rec : parser){
            int numBorn = Integer.parseInt(rec.get(2));
            if(numBorn <= 100){
            System.out.println("Name :"+rec.get(0) +
                               ", Gender :"+rec.get(1) +
                               ", Num Born :"+rec.get(2));
                            }
        }
    }
    public void totalBirth(FileResource fr){
      int totalNumberOfBorn = 0;
      int totalBoys=0;
      int totalGirls=0;
      int numberofboysname = 0;
      int numberofgirlsname = 0;
      CSVParser parser = fr.getCSVParser(false);// no header file
        for(CSVRecord rec : parser){
         int numBorn = Integer.parseInt(rec.get(2));
            totalNumberOfBorn += numBorn;
            if(rec.get(1).equals("M")){
                totalBoys += numBorn;
                numberofboysname = numberofboysname+1; 
            }
            else{
            totalGirls += numBorn;
                numberofgirlsname = numberofgirlsname+1;
            }
    }
      System.out.println("totalNumberOfBorn : "+totalNumberOfBorn);
      System.out.println("totalBoys : "+totalBoys);
      System.out.println("totalGirls : "+totalGirls);      
      System.out.println("numberofboysname : "+numberofboysname);      
      System.out.println("numberofgirlsname : "+numberofgirlsname);            
      System.out.println(" - - - - - - - - - - - - - - - - - - - ");    
    }    

    public void testtotalBirth(){
    FileResource fr = new FileResource ("testing/yob2012short.csv");
    totalBirth(fr);
    fr = new FileResource ("testing/yob2013short.csv");
    totalBirth(fr);
    fr = new FileResource ("testing/yob2014short.csv");
    totalBirth(fr);
    }


    // getname
    public String getName(int year, int rank, String gender ){
     int rank1=0;
     int count=0;
     String name1= null;
     String filename = "testing/yob"+year+"short.csv";
     FileResource fr = new FileResource (filename);
      CSVParser parser = fr.getCSVParser(false);// no header file
        for(CSVRecord rec : parser){
         String sex1 = (rec.get(1));
           if(sex1.equals(gender)){
                count = count+1;
                if(count==rank){
                 name1 = (rec.get(0)); 
                }  
            }
            else{   
                name1= "NO NAME";
            }
        } 
        return name1;       
    }
    public void testGetName(){
        String receiveName = getName(2012,30,"M");
        System.out.println("receiveName : "+receiveName);        
    }


    public void whatIsNameInYear(String name, int year, int newyear, String gender){
     int rank1=0;
     int count=0;
     String filename = "testing/yob"+year+"short.csv";
     int rank2=0;
     int count2=0;
     String name2= null;
     String filename1 = "testing/yob"+newyear+"short.csv";

     FileResource fr = new FileResource (filename);
      CSVParser parser = fr.getCSVParser(false);// no header file
        for(CSVRecord rec : parser){
         String name1 = (rec.get(0));
         String sex1 = (rec.get(1));
           if(sex1.equals(gender)){
                count = count+1;
                if(name1.equals(name)){
                 break;  
                }  
            }
            else{   
                count= -1;
            }
        }
        rank2=count;
     FileResource fr2 = new FileResource(filename1);
      CSVParser parser2 = fr2.getCSVParser(false);// no header file
        for(CSVRecord rec2 : parser2){
         String sex2 = (rec2.get(1));
           if(sex2.equals(gender)){
                count2 = count2+1;
                System.out.println(count2);
                System.out.println(rank2);                
                if(count2==rank2){
                 name2 = (rec2.get(0));
                break;                 
                }  
            }
            else{   
                name2= "NO NAME";
            }
        }     
     System.out.println(name+" born in "+ year +" would be "+ name2 +" if she was born in "+ newyear);      
    }
    public void testnewyearname(){
    whatIsNameInYear("Isabella",2012,2014,"F");
    }

}

import edu.duke.*;
import org.apache.commons.csv.*;
public class BabyNameSimplePrint1 {
    public void printName(){
    FileResource fr = new FileResource();
    CSVParser parser = fr.getCSVParser(false);// no header file

        for(CSVRecord rec : parser){
            System.out.println("Name :"+rec.get(0) +
                               ", Gender :"+rec.get(1) +
                               ", Num Born :"+rec.get(2));

        }
    }
}

import edu.duke.*;
import org.apache.commons.csv.*;
public class BabyNameBirthLessThan2 {
    public void printName(){
    FileResource fr = new FileResource();
    CSVParser parser = fr.getCSVParser(false);// no header file

        for(CSVRecord rec : parser){
            int numBorn = Integer.parseInt(rec.get(2));
            if(numBorn <= 100){
            System.out.println("Name :"+rec.get(0) +
                               ", Gender :"+rec.get(1) +
                               ", Num Born :"+rec.get(2));
                            }
        }
    }
}

import edu.duke.*;
import org.apache.commons.csv.*;
public class BabyNameTotalNumBorn3 {
    public void printName(){
    FileResource fr = new FileResource();
    CSVParser parser = fr.getCSVParser(false);// no header file

        for(CSVRecord rec : parser){
            int numBorn = Integer.parseInt(rec.get(2));
            if(numBorn <= 100){
            System.out.println("Name :"+rec.get(0) +
                               ", Gender :"+rec.get(1) +
                               ", Num Born :"+rec.get(2));
                            }
        }
    }
    public void totalBirth(FileResource fr){
      int totalNumberOfBorn = 0;
      CSVParser parser = fr.getCSVParser(false);// no header file
        for(CSVRecord rec : parser){
         int numBorn = Integer.parseInt(rec.get(2));
            totalNumberOfBorn += numBorn;
        }
      System.out.println(totalNumberOfBorn);
    }    

    public void testtotalBirth(){
    FileResource fr = new FileResource ("example-small.csv");
    totalBirth(fr);
    }

}

import edu.duke.*;
import org.apache.commons.csv.*;
public class BabyNameTotalBoyTotalGirl4 {
    public void printName(){
    FileResource fr = new FileResource();
    CSVParser parser = fr.getCSVParser(false);// no header file

        for(CSVRecord rec : parser){
            int numBorn = Integer.parseInt(rec.get(2));
            if(numBorn <= 100){
            System.out.println("Name :"+rec.get(0) +
                               ", Gender :"+rec.get(1) +
                               ", Num Born :"+rec.get(2));
                            }
        }
    }
    public void totalBirth(FileResource fr){
      int totalNumberOfBorn = 0;
      int totalBoys=0;
      int totalGirls=0;
      CSVParser parser = fr.getCSVParser(false);// no header file
        for(CSVRecord rec : parser){
         int numBorn = Integer.parseInt(rec.get(2));
            totalNumberOfBorn += numBorn;
            if(rec.get(1).equals("M")){
                totalBoys += numBorn;
            }
            else{
            totalGirls += numBorn;
            }
        }
      System.out.println(totalNumberOfBorn);
      System.out.println(totalBoys);
      System.out.println(totalGirls);      
    }    

    public void testtotalBirth(){
    FileResource fr = new FileResource ("data/yob2014.csv");
    totalBirth(fr);
    }

}

import edu.duke.*;
import org.apache.commons.csv.*;
public class BbNumOfName5 {
    public void printName(){
    FileResource fr = new FileResource();
    CSVParser parser = fr.getCSVParser(false);// no header file

        for(CSVRecord rec : parser){
            int numBorn = Integer.parseInt(rec.get(2));
            if(numBorn <= 100){
            System.out.println("Name :"+rec.get(0) +
                               ", Gender :"+rec.get(1) +
                               ", Num Born :"+rec.get(2));
                            }
        }
    }
    public void totalBirth(FileResource fr){
      int totalNumberOfBorn = 0;
      int totalBoys=0;
      int totalGirls=0;
      int numberofboysname = 0;
      int numberofgirlsname = 0;
      CSVParser parser = fr.getCSVParser(false);// no header file
        for(CSVRecord rec : parser){
         int numBorn = Integer.parseInt(rec.get(2));
            totalNumberOfBorn += numBorn;
            if(rec.get(1).equals("M")){
                totalBoys += numBorn;
                numberofboysname = numberofboysname+1; 
            }
            else{
            totalGirls += numBorn;
                numberofgirlsname = numberofgirlsname+1;
            }
    }
      System.out.println("totalNumberOfBorn : "+totalNumberOfBorn);
      System.out.println("totalBoys : "+totalBoys);
      System.out.println("totalGirls : "+totalGirls);      
      System.out.println("numberofboysname : "+numberofboysname);      
      System.out.println("numberofgirlsname : "+numberofgirlsname);            
      System.out.println(" - - - - - - - - - - - - - - - - - - - ");    
    }    

    public void testtotalBirth(){
    FileResource fr = new FileResource ("testing/yob2012short.csv");
    totalBirth(fr);
    fr = new FileResource ("testing/yob2013short.csv");
    totalBirth(fr);
    fr = new FileResource ("testing/yob2014short.csv");
    totalBirth(fr);

    }

}

import edu.duke.*;
import org.apache.commons.csv.*;
public class BBGetRank6 {   
    public int getRank(int year, String name, String gender ){
     int rank1=0;
     int count=0;
     String filename = "testing/yob"+year+"short.csv";
     FileResource fr = new FileResource (filename);
      CSVParser parser = fr.getCSVParser(false);// no header file
        for(CSVRecord rec : parser){
         String name1 = (rec.get(0));
         String sex1 = (rec.get(1));
           if(sex1.equals(gender)){
                count = count+1;
                if(name1.equals(name)){
                 break;  
                }  
            }
            else{   
                count= -1;
            }
        } 
        return count;       
    }
    public void testRank(){
        int receiveRank = getRank(2012,"Mason","M");
        System.out.println("receiveRank : "+receiveRank);        
    }

}

import edu.duke.*;
import org.apache.commons.csv.*;
public class BBGetName7 { 

    public String getName(int year, int rank, String gender ){
     int rank1=0;
     int count=0;
     String name1= null;
     String filename = "testing/yob"+year+"short.csv";
     FileResource fr = new FileResource (filename);
      CSVParser parser = fr.getCSVParser(false);// no header file
        for(CSVRecord rec : parser){
         String sex1 = (rec.get(1));
           if(sex1.equals(gender)){
                count = count+1;
                if(count==rank){
                 name1 = (rec.get(0)); 
                }  
            }
            else{   
                name1= "NO NAME";
            }
        } 
        return name1;       
    }
    public void testGetName(){
        String receiveName = getName(2012,2,"M");
        System.out.println("receiveName : "+receiveName);        
    }
}

import edu.duke.*;
import org.apache.commons.csv.*;
public class BBNewNameNewYear8 {


    public void whatIsNameInYear(String name, int year, int newyear, String gender){
     int rank1=0;
     int count=0;
     String filename = "testing/yob"+year+"short.csv";
     int rank2=0;
     int count2=0;
     String name2= null;
     String filename1 = "testing/yob"+newyear+"short.csv";

     FileResource fr = new FileResource (filename);
      CSVParser parser = fr.getCSVParser(false);// no header file
        for(CSVRecord rec : parser){
         String name1 = (rec.get(0));
         String sex1 = (rec.get(1));
           if(sex1.equals(gender)){
                count = count+1;
                if(name1.equals(name)){
                 break;  
                }  
            }
            else{   
                count= -1;
            }
        }
        rank2=count;
     FileResource fr2 = new FileResource(filename1);
      CSVParser parser2 = fr2.getCSVParser(false);// no header file
        for(CSVRecord rec2 : parser2){
         String sex2 = (rec2.get(1));
           if(sex2.equals(gender)){
                count2 = count2+1;              
                if(count2==rank2){
                 name2 = (rec2.get(0));
                break;                 
                }  
            }
            else{   
                name2= "NO NAME";
            }
        }     
     System.out.println(name+" born in "+ year +" would be "+ name2 +" if she was born in "+ newyear);   

    }

    public void testnewyearname(){
    whatIsNameInYear("Isabella",2012,2014,"F");
    }
}
import edu.duke.*;
import org.apache.commons.csv.*;
import java.io.File;
import java.util.HashMap;

public class YearOfHighRank9 {

    public int getRank(File file, String name, String gender) {
        int rank = 0;
        int count = 0;
        FileResource fr = new FileResource(file);
        CSVParser parser = fr.getCSVParser(false); // no header file
        for (CSVRecord rec : parser) {
            String name1 = rec.get(0);
            String sex1 = rec.get(1);
            if (sex1.equals(gender)) {
                count++;
                if (name1.equals(name)) {
                    return count;  
                }
            }
        }
        return -1; // Return -1 if the name is not found for the specified gender
    }

    // Method to find the file with the lowest rank (highest rank number) for the given name and gender
    public String findFileWithLowestRank(String name, String gender) {
        DirectoryResource dr = new DirectoryResource();
        HashMap<String, Integer> fileRanks = new HashMap<>();

        // Process each file selected by the user
        for (File f : dr.selectedFiles()) {
            int rank = getRank(f, name, gender);
            if (rank != -1) { // Ignore files where name and gender are not found
                fileRanks.put(f.getName(), rank);
            }
        }

        // Find the file with the highest rank number (lowest position)
        String lowestRankFile = null;
        int lowestRank = Integer.MIN_VALUE;

        for (String filename : fileRanks.keySet()) {
            int currentRank = fileRanks.get(filename);
            if (currentRank > lowestRank) {
                lowestRank = currentRank;
                lowestRankFile = filename;
            }
        }
        return lowestRankFile;
    }

    public void testRank() {
        String lowestRankFile = findFileWithLowestRank("Sophia", "F");
        if (lowestRankFile != null) {
            System.out.println("File with the lowest rank (largest rank number): " + lowestRankFile);
        } else {
            System.out.println("Name not found in any selected file.");
        }
    }
}
import edu.duke.*;
import org.apache.commons.csv.*;
import java.io.File;
import java.util.HashMap;

public class GetAverageRank10 {


    public int getRank(File file, String name, String gender) {
        int rank = 0;
        int count = 0;
        FileResource fr = new FileResource(file);
        CSVParser parser = fr.getCSVParser(false); // no header file
        for (CSVRecord rec : parser) {
            String name1 = rec.get(0);
            String sex1 = rec.get(1);
            if (sex1.equals(gender)) {
                count++;
                if (name1.equals(name)) {
                    return count;  
                }
            }
        }
        return -1; // Return -1 if the name is not found for the specified gender
    }

    // Method to get the average rank across selected files
    public double getAverageRank(String name, String gender) {
        DirectoryResource dr = new DirectoryResource();
        int totalRank = 0;
        int fileCount = 0;

        // Process each file selected by the user
        for (File f : dr.selectedFiles()) {
            int rank = getRank(f, name, gender);
            if (rank != -1) { // Only add ranks if the name is found
                totalRank += rank;
                fileCount++;
            }
        }

        // Calculate the average rank if the name was found in any file
        if (fileCount > 0) {
            return (double) totalRank / fileCount;
        } else {
            return -1.0; // Return -1.0 if the name is not ranked in any file
        }
    }

    public void testAverageRank() {
        double averageRank = getAverageRank("Jacob", "M");
        if (averageRank != -1.0) {
            System.out.println("Average rank for Mason (M) across selected files: " + averageRank);
        } else {
            System.out.println("Name not ranked in any selected file.");
        }
    }
}