import easyIO.*;

class Oblig2 {
    public static void main(String[] args) {
        Olje ol = new Olje();
        ol.ordreløkke();
        System.out.println("--Avslutter programmet--");
    } //end main
} //end class Oblig2

class Olje {
    String[][] eier = new String[15][20];
    int[][] utvunnet = new int[15][20];

    In tast = new In();
    Out skjerm = new Out();


    void ordreløkke() {
        int ordre = 0;

        while (ordre != 8) {
            skrivMeny();
            ordre = velgOperasjon();

            switch (ordre) {
                case 1: kjøpFelt();                   break;
                case 2: annulerKjøpAvFelt();          break;
                case 3: lagKart();                    break;
                case 4: lagSelskapsoversikt();        break;
                case 5: oppdaterOljeutvinning();      break;
                case 6: finnMaksUtvinning();          break;
                case 7: listeFeltUtenOljeutvinning(); break;
                default: break;
            } // end switch
        } // end while flere kommandoer

        System.out.println("**AVSLUTTNING PÅ RURITANIAS OLJESYSTEM**");
    } //end ordreløkke

void skrivMeny() {
    skjerm.outln("");
    skjerm.outln("");
    skjerm.outln("*** Velkommen til Ruritanias oljeoversikt ***");
    skjerm.outln("");
    skjerm.outln("Du har følgende valgmuligheter:");
    skjerm.outln("1) Kjøp et felt");
    skjerm.outln("2) Annuler kjøp av felt");
    skjerm.outln("3) Lag kart");
    skjerm.outln("4) Lag selskapsoversikt");
    skjerm.outln("5) Oppdater oljeutvinning");
    skjerm.outln("6) Finn maks utvinning");
    skjerm.outln("7) Liste felt uten oljeutvinning");
    skjerm.outln("8) Avslutt");
}

int velgOperasjon() {
    skjerm.out("Velg en kommando: ");

    int kommando = tast.inInt();
    return kommando;

}
void kjøpFelt() {

    skjerm.outln("");
    skjerm.outln("**Kjøp et felt**");
    skjerm.outln("");
    skjerm.out("Velg felt: ");
    int radnr = tast.inInt("F(,)");
    int kolnr = tast.inInt("F(,)");

    if (radnr >= 15 || kolnr >= 20) {             // Her tester jeg om radnr og kolnr som er angitt er innenfor
        skjerm.outln("");                        // arrayen som er opprettet
        skjerm.outln("Feltet finnes ikke!");
        skjerm.outln("Prøv på nytt");
        return;
    }

    if (eier[radnr][kolnr] == null) {            // Tester om eier er tom (null) for å kunne kjøpe et felt
        skjerm.out("Fyll inn oljeselskapets navn: ");
        eier[radnr][kolnr] = tast.inLine();      // Skriver selskapets navn men inline for å ta med evt. mellomrom
        skjerm.outln("");                        // selskapsnavnet blir så tillagt eier på de angitte plassene
        skjerm.outln("***********************************");
        skjerm.outln("");
        skjerm.outln(" Feltet " + "F(" + radnr + "," + kolnr + ")" + " selges til " + eier[radnr][kolnr]);
        skjerm.outln("");
    } else{
        skjerm.outln("");
        skjerm.outln("***********************************");
        skjerm.outln("");
        skjerm.outln("Feltet er solgt");         // En else setning som skriver ut hvis det oppdages at plassen i
        skjerm.outln("");                        // arrayen ikke er tom (null)
        skjerm.outln("Prøv igjen");
    }
}


void annulerKjøpAvFelt() {

    skjerm.outln("");
    skjerm.outln("**Annuler kjøp av felt**");
    skjerm.outln("");
    skjerm.out("Velg felt som skal annuleres: ");
    int radnr = tast.inInt("F(,)");
    int kolnr = tast.inInt("F(,)");

        if (radnr >= 15 || kolnr >= 20) {         // Tester om feltet er innenfor arrayen
        skjerm.outln("");
        skjerm.outln("Feltet finnes ikke!");
        skjerm.outln("Prøv på nytt");
        return;
    }

    skjerm.out("Hva er navnet på selskapet som skal annuleres: ");
    String selskap = tast.inLine();

    if (eier != null && eier[radnr][kolnr] != null && eier[radnr][kolnr].equals(selskap)) {
        eier[radnr][kolnr] = null;                           // Tester om det er registrert en eier med navn, og deretter
        skjerm.outln("");                                    // om det overenstemmer med rad og kol nr. Til slutt tester
        skjerm.outln("***********************************");  // den om seskapsnavnet som er tastet inn er likt det
        skjerm.outln("");                                     // som er registrert i arrayen
        skjerm.out("Feltet til " + selskap + " er nå annulert!");

    } else{
        skjerm.outln("");
        skjerm.outln("***********************************"); // Else setning som slår til dersom det over ikke slår til
        skjerm.outln("");
        skjerm.outln("!!!Det har oppstått en feil!!!");
        skjerm.outln("Enten så tilhører ikke feltet deg");
        skjerm.outln("Eller så er feltet uten eier");
        skjerm.outln("");
        skjerm.outln("Prøv igjen");
    }
}


void lagKart() {

    skjerm.outln("");
    skjerm.outln("**Felter med 'X' er opptatt**");
    skjerm.outln("");

        for (int i=0; i<eier[0].length; i++) {  // Løper igjennom eier for så å skrive ut kolnr med 3 punkts mellomrom
            skjerm.out(i, 3);
            }
            for (int j=0; j<eier.length; j++) { // Løper igjennom eier for å skrive ut radnr, med linjeskift(\n) for
            skjerm.out ("\n" + j, 3);           // å hoppe til neste linje
            for (int k=0; k<eier[0].length; k++) {    // Løper igjennom arrayen eier for så å skrive "X" dersom det
                if (eier[j][k] != null) {             // feltet ikke er null.
                    skjerm.out("X", 3);

                    } else{                     // Else som skriver "." dersom felter er tomt (null)
                        skjerm.out(".", 3);
                    }
                }
            }
        }

/*
void lagSelskapsoversikt() {
    skjerm.outln("");
    skjerm.outln("**Liste over oljeselskaper med antall felter**");
    skjerm.outln("");

    String[] selskap = new String[300];
    int teller = 0;


    for (int i=0; i<eier.length; i++) {
        for (int j=0; j<eier[0].length; j++) { // Løper igjennom arrayen eier
            if (eier[i][j] != null) {          // Plukker ut de som har en annen verdi enn null
                selskap[0] = eier[i][j];       // Legger disse verdiene inn i en ny array selskap som er deklarert internt i metoden
                for (int k=0; k<selskap.length; k++) {


                    for (int m=0; m<selskap.length; m++) { // Prøver her å løpe igjennom arrayen selskaper
                        if (selskap.equals(selskap[k])) {  // og øke telleren med en for hver gang den støter på et tilsvarende ord
                            teller++;
                        }
                    }
                } skjerm.outln(selskap[teller]);
            }
        }
    }
}

*/


void lagSelskapsoversikt() {
/*      skjerm.outln("");
        skjerm.outln("**Liste over oljeselskaper med antall felter**");
        skjerm.outln("");

        String[] selskap = new String[300];
        int[] antallfelter = new int[300];
        int nr = 0;

        for (int i=0; i<eier.length; i++) {
            for (int j=0; j<eier[0].length; j++) {
                if (eier[i][j] != null) {
                    boolean funnet = false;

                    for (int k=0; k<selskap.length; k++) {
                        if (selskap[k].equals(eier[i][j])) {
                            funnet = true;
                        }
                        if (!funnet) {
                            selskap[0] = eier[i][j];
                        }
                    }

                    for (int i=0; i<eier.length; i++) {
                        for (int j=0; j<eier[0].length; j++) {
                            if (eier[i][j] != null) {
                                for (int k=0; k<selskap.length; k++) {
                                    if (selskap[k].equals(eier[i][j])) {
                                        k++;
                                    }
                                }
                            } skjerm.outln(selskap);
                        }
                    }
                }
            }
        }*/
    }





void oppdaterOljeutvinning() {
    skjerm.outln("");
    skjerm.outln("**Oppdater Oljeutvinning**");
    skjerm.outln("");
    skjerm.out("Velg felt: ");

    int radnr = tast.inInt("F(,)");
    int kolnr = tast.inInt("F(,)");

    skjerm.out("Navnet på selskapet feltet tilhører: ");
    String selskap = tast.inLine();

    if (eier[radnr][kolnr] == null) {  // Sjekker om feltet i arrayen er tomt (null)
        skjerm.outln("");
        skjerm.outln("Feltet har ingen eier!");
        skjerm.outln("Prøv igjen");
        return;
    }


        if (!eier[radnr][kolnr].equals(selskap)) {  // Sjekker om eier ikke er likt selskapet som er tastet inn
            skjerm.outln("");
            skjerm.outln("Feltet tilhører ikke det selskapet!");
            skjerm.outln("Prøv igjen");
            return;


            } else{

                skjerm.outln("");
                skjerm.outln("Hvor mange fat olje har dette feltet utvunnet \ni løpet av de siste 3 månedene: ");
                int olje = tast.inInt();

                utvunnet[radnr][kolnr] = utvunnet[radnr][kolnr] + olje;
                skjerm.outln(""); // Setter inn antall fat olje i arrayen utvunnet, med int verdier. Arrayen er også i int
                skjerm.outln("");
                skjerm.out("Det har til nå blitt utvunnet " + utvunnet[radnr][kolnr] + " fat olje på felt F(" + radnr + "," + kolnr + ") som tilhører " + eier[radnr][kolnr]);
            }
        }


void finnMaksUtvinning() {
    skjerm.outln("");
    skjerm.outln("**Maks oljeutvinning**");
    skjerm.outln("");

    int maks = utvunnet[0][0]; // Løkke som registrerer høyeste verdi i maks
    int k = 0; // Deklarer k og l
    int l = 0;

    for (int i=1; i<utvunnet.length; i++) {
        for (int j=1; j<utvunnet[0].length; j++) {
            if (utvunnet[i][j] > maks) {  // Løkken går rundt en gang til den finner en verdi større en maks
            maks = utvunnet[i][j];

            k = i; // Verdiene overføres til k og l for å kunne brukes i en ny if - else
            l = j;
            }
        }
    }

    if (eier[k][l] == null) { // Tester om det er registrert noen verdier i arrayen
            skjerm.out("Ingen felter har rapportert noe utvinning!");

    } else{ // Skriver ut hvilket felt som har utvunnet mest, hvor mye og på hvilket felt
    skjerm.out(eier[k][l] + " har utvunnet " + utvunnet[k][l] + " fat olje på felt F(" + k + "," + l + ")");
}
}



void listeFeltUtenOljeutvinning() {
    skjerm.outln("");
    skjerm.outln("**Felter uten oljeutvinning**");
    skjerm.outln("");


            for (int i=0; i<utvunnet.length; i++) {
                for (int j=0; j<utvunnet[0].length; j++) {
                    if (utvunnet[i][j] == 0 && eier[i][j] != null) { // Går igjennom arrayen utvunnet og sjekker om
                                                                      // verdien er lik '0', og om eier i tilsvarende felt
                skjerm.outln("F( " + i + "," + j + ") " + eier[i][j]);// ikke er tom (null)
                }
            }
        }
    }





} // end class Olje