import java.util.*;
public class Flight
{
    // id for flight which is alloted everytime a new Flight Object is created
    static int id = 0;
    int flightID;
    //Availabel number of tickets currently in flight
    int tickets;
    //current price
    int price;
    //string list of all passenger details for printing
    ArrayList<String> passengerDetails;
    //list of all passenger IDs
    ArrayList<Integer> passengerIDs;
    //list of number of tickets booked by every passenger ID
    ArrayList<Integer> bookedTicketsPerPassenger;
    //list of cost paid by every passenger ID, used to calculate refund while cancelling
    ArrayList<Integer> passengerCost;

    //constructor to set values
    public Flight()
    {
        tickets = 50;
        price = 5000;
        id = id + 1;
        flightID = id;
        passengerDetails = new ArrayList<String>();
        passengerIDs = new ArrayList<Integer>();
        bookedTicketsPerPassenger = new ArrayList<Integer>();
        passengerCost = new ArrayList<Integer>();
    }

    //add passenger details to flight
    public void addPassengerDetails(String passengerDetail,int numberOfTickets,int passengerID)
    {
        passengerDetails.add(passengerDetail);
        passengerIDs.add(passengerID);
        passengerCost.add(price * numberOfTickets);

        //updating price using logic in the problem statement
        price+=200 * numberOfTickets;

        //updating available number of tickets
        tickets-= numberOfTickets;
        bookedTicketsPerPassenger.add(numberOfTickets);
        System.out.println("Booked Successfully!");

    }

    //cancel tickets booked by a passenger ID
    public void cancelTicket(int passengerID)
    {
        //find the index to remove from all lists
       int indexToRemove = passengerIDs.indexOf(passengerID);
       if(indexToRemove < 0)
       {
           System.out.println("Passenger ID not found!");
           return;
       }
       int ticketsToCancel = bookedTicketsPerPassenger.get(indexToRemove);

       //increase number of available tickets
       tickets+=ticketsToCancel;
       //change price to new value after cancellation
       price-= 200 * ticketsToCancel;

       //calculate refund
       System.out.println("Refund Amount after cancel : " + passengerCost.get(indexToRemove));

       //remove details of passenger from all lists
       bookedTicketsPerPassenger.remove(indexToRemove);
       passengerIDs.remove(Integer.valueOf(passengerID));
       passengerDetails.remove(indexToRemove);
       passengerCost.remove(indexToRemove);

       System.out.println("Cancelled Booked Tickets Successfully!");

    }

    //functions to print details about flights and passengers
    public void flightSummary()
    {
        System.out.println("Flight ID " + flightID + " --" + "Remaining Tickets " + tickets + " --" + 
        "Current Ticket Price " + price);
    }
    public void printDetails()
    {
       System.out.println("Flight ID " + flightID + "->");
        for(String detail : passengerDetails)
            System.out.println(detail);
    }


} 
by