package Kuliah;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;
public class AppWarungSederhana {
    static Scanner sc = new Scanner(System.in);
    static int jumlah[] = new int[15];
    static int strukharga[] = new int[5];
    static  int struk=0, grandTotal=0, uangpembeli=0, kembali=0;
    static  int totalbeli[] = new int [15];
    static int  idx = 0;
    static String strukmenu[] = new String[15];
    static String sellsdat [] = new String [15];
    static int porsidat [] = new int [15];
    static int pricedat [] = new int [15];
    static int subdat [] = new int [15];
    static int grandat = 0, data = 0;
    static int hari = 1;
    static String sellsdat1 [] = new String[15];
    static int porsidat1[] = new int [15];
    
    static String[] sort(int count, String [] menu, int [] harga){
        for (int i = 0; i < count; i++) {
            for (int j = 0; j < count-1; j++) {
                if (menu[j].compareToIgnoreCase(menu[j+1])>0){
                    String t = menu [j];
                    menu [j] = menu [j+1];
                    menu [j+1] = t;
                    
                    int temp1 = harga [j];
                    harga [j]= harga [j+1];
                    harga [j+1] = temp1;
                }
            }  
        } 
        return menu;
    }
     static void subtotal() {
       jumlah[struk] = sc.nextInt();
        totalbeli[struk]=jumlah[struk]*strukharga[struk];
        grandTotal=grandTotal+totalbeli[struk];

        sellsdat[data] = strukmenu[struk]; //nama makanan
        porsidat[data]= jumlah[struk];// banyak porsi
        subdat [data]= totalbeli[struk]; 
        pricedat [data] = strukharga[struk];// harga perporsi
        data++;
        struk++;                                                       
}
     static String [][] mCari(int Jmlh, String [] menu, int [] harga, String cari){
         String [][] hasil = new String [10][10];
         int index = 0;
         for (int i = 0; i < Jmlh; i++) {
             if (menu[i].indexOf(cari)>=0){
                 hasil [index][0] = menu [i];
                 hasil [index][1]= String.valueOf(harga[i]);
                 index++;
             }
         }
         return hasil;
     }
    public static void main(String[] args) {
        String makanan[] = new String [15];
        int harga [] = new int [15];
        int plh=0, pilihuser = 0, pilih =0;
       String namamenu[] = new String[15];
       int namaharga[] = new int [15];
       //waktu
       DateTimeFormatter formatgl = DateTimeFormatter.ofPattern("HH:mm:ss dd/MM/yyy");
       LocalDateTime waktu = LocalDateTime.now();
      
       
       int pilih2=0, indeks=0, idxharga=0, idxnama=0, pcs = 10;
        makanan[0]="Tappoki (Original) ";  harga[0]=10000;
        makanan[1]="Twigim"+"\t";   harga[1]=8000;
        makanan[2]="Odeng\t";    harga[2]=15000;
        makanan[3]="Gimbab"; harga[3]=12000;
        makanan[4]="Dakkoci";harga[4]=10000;
        makanan[5]="Tappoki (Spisy)   ";  harga[5]=14000;
        makanan[6]="Tappoki (Cheese)   "; harga[6]=15000;
        makanan[7]="Jajangmyeon";  harga[7]=25000;
        makanan[8]="Ramyeon (Original)";  harga[8]=20000;
        makanan[9]="Ramyeon (Spisy)";   harga[9]=23000;

       System.out.println("\tKam's\t"+"\n Korean Street Foods");
       System.out.println("=======================");
       do { System.out.println("\n------- PILIH USER ------");
           System.out.println("1. Kasir");
           System.out.println("2. Admin");
           System.out.println("3. Owner");
           System.out.println("4. Exit");
           System.out.print("Pilih = ");
           plh = sc.nextInt();
           switch(plh){
               case 1: //kasir
                     String rangemenu[] = new String[15];
                     int rangeharga[] = new int[15];
                   do{
                       System.out.println("1. Buat Pesanan");
                       System.out.println("2. Exit");
                       System.out.print("Pilih = ");
                       pilihuser = sc.nextInt();
                       switch (pilihuser){
                           case 1 :
                           do{ System.out.println("\n"+"1. Daftar menu");
                           System.out.println("2. Pesan berdasarkan daftar menu");
                            System.out.println("3. Cari makanan berdasarkan nama");
                            System.out.println("4. Cari makanan berdasarkan harga");
                            System.out.println("5. Selesai");
                            System.out.print("pilih: ");
                            pilih = sc.nextInt();
                            switch (pilih){
                                case 1:
                                  System.out.println("--------Daftar menu--------"); 
                                  String[] urut = sort(pcs, makanan, harga);
                                  for (int i = 0; i < pcs; i++) {
                                  System.out.println((i+1)+". "+urut[i]+"\t"+harga[i]);
                                    } 
                                  break;
                                case 2: 
                                    System.out.print("Pilih menu :");
                                    pilih2=sc.nextInt();
                                    strukmenu[struk]=makanan[pilih2-1];
                                    strukharga[struk]=harga[pilih2-1];
                                    System.out.print("Jumlah pesanan :");
                                    subtotal(); 
                                    break;
                                case 3:
                                    System.out.print("Cari makanan :");
                                    String cari = sc.next();
                                    String tempmenu = sc.nextLine();
                                    String p = cari+tempmenu;
                                    String search [][]= mCari (pcs, makanan, harga, p);
                                    for (int i = 0; i < pcs; i++) {
                                        if (makanan[i].contains(p)) {
                                            namamenu [idxnama] = makanan[i];
                                            namaharga[idxnama] = harga[i];
                                            idxnama++;
                                            System.out.println(idxnama+"."+makanan[i]+"\t"+harga[i]);
                                        }
                                    }  System.out.print("Pilih menu :");
                                    pilih2=sc.nextInt();
                                    strukmenu[struk]=namamenu[pilih2-1];
                                    strukharga[struk]=namaharga[pilih2-1];
                                    System.out.print("Jumlah pesanan :");
                                   subtotal();
                                    break;
                                case 4:
                                    int cariharga=0;
                                    System.out.print("Harga mulai :");
                                    int hargaawal = sc.nextInt();
                                    System.out.print("Sampai harga :");
                                    int hargaakhir = sc.nextInt();
                                       for (int i = 0; i < harga.length; i++) {
                                        if(hargaawal <= harga[i] && harga[i]<=hargaakhir){
                                            rangemenu[idxharga] = makanan[i];
                                            rangeharga[idxharga] = harga[i];
                                            idxharga++;
                                            System.out.println(idxharga+"."+makanan[i]+"\t"+harga[i]);
                                        }
                                    }   System.out.print("Pilih menu :");
                                        pilih2=sc.nextInt();
                                        strukmenu[struk]=rangemenu[pilih2-1];
                                        strukharga[struk]=rangeharga[pilih2-1];
                                        System.out.print("Jumlah pesanan :");
                                        subtotal();
                                    break;
                            }
                           }while (pilih!=5);
                               break;
                       }    
                       System.out.println("\n-----------------------  STRUK PEMBELI  -----------------------");
                       System.out.println("\t\t\t     Kam's\t"+"\n \t\t      Korean Street Foods");
                       System.out.println("\t\t    "+waktu);
                       System.out.println(" ");
                       System.out.println("No. Menu\t\tHarga\t\tJumlah\t\tTotal");
                       for (int i = 0; i < struk; i++) {
                      System.out.println((i+1)+". "+strukmenu[i]+" Rp."+strukharga[i]+"\t\t"+jumlah[i]+"\t\t Rp."+totalbeli[i]);
                      } 
                       System.out.println("---------------------------------------------------------------");
                        System.out.println("TOTAL   : Rp.  " +grandTotal);
                        System.out.print("Bayar   : Rp.  ");
                        uangpembeli = sc.nextInt();
                        if (uangpembeli>grandTotal){
                            kembali=uangpembeli-grandTotal;
                            System.out.println("Kembali : Rp.  " +kembali);
                        }
                        else{
                            System.out.println("Uang Anda PAS");
                        }
                        System.out.println("---------------------------------------------------------------");
                        System.out.println("kam-sa-ham-ni-da"+"\nTerimakasih :)");
                        //reset array
                        struk = 0;
                        grandTotal = 0;
                        jumlah[struk] = 0;
                        strukharga[struk]=0;
                        totalbeli[struk]= 0;
                        break;
                   }while (pilihuser!=2);//keluar dari user kasir
                   break; //kasir
               case 2: //Admin
                   do{
                       System.out.println("\n----- HALAMAN ADMIN -----");
                        System.out.println("1. Tampilkan Menu");
                        System.out.println("2. Tambah Menu");
                        System.out.println("3. Hapus Menu");
                        System.out.println("4. Ganti Menu");
                        System.out.println("5. Exit");
                        System.out.print("Pilih = ");
                        pilihuser = sc.nextInt();
                        switch (pilihuser) {
                            case 1: // menu
                                System.out.println("-------- MENU --------"); 
                                String[] urut = sort(pcs, makanan, harga );
                                for (int i = 0; i < pcs; i++) {
                                System.out.println((i+1)+". "+urut[i]+"\t"+"["+harga[i]+"]");}
                                break; //menu
                            case 2://tambah
                                 System.out.print("Nama  = ");
                                makanan [pcs] = sc.next();
                                String tempmenu1 = sc.nextLine();
                                String p = makanan[pcs]+tempmenu1;
                                makanan [pcs] = p;
                                System.out.print("Harga = ");
                                harga [pcs]= sc.nextInt();
                                System.out.println("Menu "+"'"+makanan[pcs]+"'"+" berhasil ditambahkan");
                                pcs++;
                                break; //tambah
                            case 3://hapus
                                System.out.print("Nama menu = ");
                                String hapusmenu = sc.next();
                                String tempmenu2 = sc.nextLine();
                                String x = hapusmenu+tempmenu2;
                                boolean find = false;
                                int idkmkn = 0;
                                for (int i = 0; i < pcs; i++) {
                                    if (makanan[i].compareToIgnoreCase(x) ==0 ){
                                        find = true;
                                        idkmkn=i;
                                        System.out.println("Menu "+"'"+x+"'" +" berhasil dihapus");
                                        break;
                                    }
                                }
                                if (find==false){
                                    System.out.println("Menu tidak ditemukan.");
                                } else
                                    for (int i = idkmkn; i < pcs-1; i++) {
                                        makanan[i]=makanan[i+1]; 
                                    } 
                                pcs--;
                                break; //hapus
                            case 4://ganti
                                System.out.print("Nama makanan yang diganti = ");
                                String namamakan = sc.next();
                                 String tempmenu3 = sc.nextLine();
                                String y = namamakan+tempmenu3;
                                String newmenu;
                                int newharga;
                                System.out.print("Masukan nama menu baru = ");
                                newmenu = sc.next();
                                String tempmenu4 = sc.nextLine();
                                String z = newmenu+tempmenu4;
                                System.out.print("Masukan harganya = ");
                                newharga= sc.nextInt();
                                System.out.print("");
                                boolean ketemu = false;
                                int idkmenu = 0; for (int i = 0; i < pcs; i++) {
                                    if (makanan[i].compareToIgnoreCase(y)==0){
                                        ketemu = true;
                                        idkmenu=i;
                                        harga[i]=0;
                                        makanan[i]="";
                                        harga[i]=newharga;
                                        makanan [i] = z;
                                        System.out.println("Menu "+"'"+y+"'"+" diganti "+"'"+z+"'");
                                    } 
                                }
                                break; //ganti
                        }
                   } while(pilihuser!=5); 
                   break;//admin
               case 3: //owner
                       System.out.println("\n----- HALAMAN OWNER -----");
                        System.out.println("1. Total Pemasukan");
                        System.out.println("2. 5 Menu Terlaris");
                        System.out.println("3. Exit");
                        System.out.print("Pilih = ");
                        pilihuser = sc.nextInt();
                        switch (pilihuser) {
                            case 1 :
                                 System.out.println("---------------------------------------------------------------");
                                  System.out.println("[\t\t TOTAL PEMASUKAN\t\t]");
                                  System.out.println("---------------------------------------------------------------");
                                  System.out.println("Hari ke : "+hari);
                                  System.out.println("No. Tanggal      Waktu   \tMenu    \t Harga \t Porsi \t Subtotal");
                                  for (int i = 0; i < data; i++) {
                                      System.out.println((i+1)+". "+    waktu+"\t" +sellsdat[i]+"\t"+pricedat[i]+"\t"+porsidat[i]+"\t"+subdat[i]);
                                      grandat = grandat+subdat[i];
                                } System.out.println("---------------------------------------------------------------");
                                System.out.println("Total Pemasukan \t\t : "+grandat);
                                System.out.println("---------------------------------------------------------------");
                                hari++;
                                data++;
                                break;
                            case 2 :
                                sellsdat1 = sellsdat;
                                porsidat1 = porsidat;
                                for (int i = 0; i < 4; i++) {
                                    for (int j = i+1 ; j < 5 ; j++) {
                                     if (porsidat1[i] < porsidat[j])  {
                                         int temp = porsidat1[j];
                                         porsidat1[j] = porsidat[i];
                                         porsidat1 [i] = temp;
                                         
                                         String top = sellsdat1[j];
                                         sellsdat1 [j] = sellsdat [i];
                                         sellsdat[i] = top;
                                     } 
                                    }
                                }
                                System.out.println("---------------------------------------------------------------");
                                System.out.println("*                 TOP 5 MENU TERLARIS               *");
                                System.out.println("---------------------------------------------------------------");
                                System.out.println("no. Barang \t\tporsi\t\tProfit");
                                for (int i = 0; i < 5; i++) {
                                    if(sellsdat1!=null){
                                        System.out.println((i+1)+". "+sellsdat1[i]+"\t\t"+porsidat1[i]+"\t\t"+subdat[i]);
                                    }
                                }
                                break;
                        }

                   break; //owner   
           }//percabangan pilih user
       } while (plh!=4); //loop awal
        System.out.println("Program Selesai");
    }//main
       }