<?php
use Illuminate\Support\Facades\Route;

//Admin
use App\Http\Controllers\Admin\User\AdminUserController;
use App\Http\Controllers\Admin\Setting\AdminSettingController;
use App\Http\Controllers\Admin\Dashboard\AdminDashboardController;
use App\Http\Controllers\Admin\Notification\AdminNotification;
use App\Http\Controllers\Admin\Transaction\AdminTransactionController;
use App\Http\Controllers\Admin\Refund\AdminRefundController;

//Login
use App\Http\Controllers\Login\LoginController;

//User
use App\Http\Controllers\User\Contact\UserContactController;
use App\Http\Controllers\User\Refund\UserRefundController;
use App\Http\Controllers\User\Dashboard\UserDashboardController;
use App\Http\Controllers\User\Transaction\UserTransactionController;
use App\Http\Controllers\User\Pembeli\PembeliController;
use App\Http\Controllers\User\Penjual\PenjualController;

//Profile
use App\Http\Controllers\Profile\ProfileController;

//Invoice
use App\Http\Controllers\Invoice\InvoiceController;
use App\Http\Controllers\User\Notification\UserNotification;

// use Illuminate\Foundation\Auth\User;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "web" middleware group. Make something great!
|
*/
Route::get('/', function () {
    return view('welcome'
    );
});

//Index



// Login, logout dan register
Route::controller(LoginController::class)->group(function(){
    Route::get('login','login')->name('login');
    Route::get('logout','logout')->name('logout');
    Route::post('authenticate','authenticate')->name('autentikasi');
    Route::post('register','register')->name('register');
    Route::get('cek-email','accountStatus')->name('status-akun');
    Route::get('cari-provinsi','searchProvince')->name('cari-provinsi');
    Route::get('cari-kota','searchCity')->name('cari-kota');
    Route::get('cari-kecamatan','searchDistrict')->name('cari-kecamatan');
    Route::get('cari-kelurahan','searchVillage')->name('cari-kelurahan');
    Route::post('kode-verifikasi','sendVerificationCode')->name('kirim-kode');
    Route::get('ocr','getOcr');
    Route::get('email','email');
    Route::get('test','invoice');
});

// admin dan user
Route::middleware(['auth'])->group(function(){

    Route::prefix('profile')->group(function(){
        Route::controller(ProfileController::class)->group(function(){
            Route::get('/','index')->name('profile.index');
            Route::post('update','updateProfile')->name('profile.update');
            Route::put('ganti-password','changePassword')->name('profile.change-password');
        });
    });

    Route::prefix('invoice')->group(function(){
        Route::controller(InvoiceController::class)->group(function(){
            Route::get('invoice/{id}','getInvoice')->name('invoice.get');
            Route::get('export-invoice','exportInvoice')->name('invoice.export');
        });
    });

    Route::middleware(['admin'])->group(function(){
        Route::prefix('admin')->group(function(){

            // Tampilan dashboard admin beserta perhitungan
            Route::controller(AdminDashboardController::class)->group(function(){
                Route::get('/','index')->name('admin.index');
                Route::get('admin-dashboard/get-data-dashboard','getDataBySearch')->name('admin.get-data-dashboard');
            });

            // Tampilan, aprove atau deny dan hapus user
            Route::controller(AdminUserController::class)->group(function(){
                Route::get('admin-user','index')->name('admin-user.index');
                Route::get('admin-user/list-user','listUser')->name('admin-user.list-user');
                Route::get('admin-user/{id}','show')->name('admin-user.show');
                Route::delete('admin-user/hapus-user','destroy')->name('admin-user.destroy');
                Route::put('admin-user/approve-user', 'approveUser')->name('admin-user.approve');
                Route::put('admin-user/deny-user', 'denyUser')->name('admin-user.deny');
            });

            // Tampilan transaksi (Sudah)
            Route::controller(AdminTransactionController::class)->group(function(){
                Route::get('admin-transaction','index')->name('admin-transaction.index');
                Route::get('admin-transaction/detail/{id}','show')->name('admin-transaction.show');
                Route::get('admin-transaction/list-transaction','listTransaction')->name('admin-transaction.list-transaction');
                Route::get('admin-transacion/transaction-tracking','transactionTracking')->name('admin.transaction-tracking');
                Route::put('admin-transaction/accept-transaction','approveTransaction')->name('admin-transaction.accept-transaction');
                Route::put('admin-transaction/deny-transaction','denyTransaction')->name('admin-transaction.deny-transaction');
            });

            // Tampilan, approve atau deny dan hapus refund
            Route::controller(AdminRefundController::class)->group(function(){
                Route::get('admin-refund','index')->name('admin-refund.index');
                Route::get('admin-refund/list-refund','listRefund')->name('admin-refund.list-refund');
                Route::get('admin-refund/{id}','show')->name('admin-refund.show');
                Route::put('admin-refund/approve-refund','approveRefund')->name('admin-refund.approve');
                Route::put('admin-refund/deny-refund','denyRefund')->name('admin-refund.deny');
            });

            // Tampilan, tambah, ubah dan hapus kebijakan persentase perusahaan
            Route::controller(AdminSettingController::class)->group(function(){
                Route::get('admin-setting','index')->name('admin-setting.index');
                Route::get('admin-setting/list-setting','listSetting')->name('admin-setting.list-setting');
                Route::post('admin-setting/store','store')->name('admin-setting.store');
                Route::put('admin-setting/active/','activeSetting')->name('admin-setting.active-setting');
            });

            Route::controller(AdminNotification::class)->group(function(){
                Route::get('admin-notification','index')->name('admin-notification.index');
                Route::get('admin-notification/show/{id}','show')->name('admin-notification.show');
                Route::get('admin-notification/create','create')->name('admin-notification.create');
                Route::get('admin-notification/list-notification','listNotification')->name('admin-notification.list-notification');
                Route::get('admin-notification/list-user-for-show','listUserForShow')->name('admin-notification.list-user-for-show');
                Route::get('admin-notification/list-user-for-create-edit','listUserForCreateEdit')->name('admin-notification.list-user-for-create-edit');
                Route::get('admin-notification/select-all-user','selectAllUser')->name('admin-notification.select-all-user');
                Route::get('admin-notification/edit','edit')->name('admin-notification.edit');
                Route::get('admin-notification/update-new-notification','updateNewNotification')->name('admin-notification.update-new-notification');
                Route::post('admin-notification/store','store')->name('admin-notification.store');
                Route::post('admin-notification/update','update')->name('admin-notification.update');
                Route::delete('admin-notification/delete','delete')->name('admin-notification.delete');
                Route::delete('admin-notification/delete-all','deleteAll')->name('admin-notification.delete-all');
            });
        });
    });

    Route::middleware(['user'])->group(function(){
        Route::prefix('user')->group(function(){

            // Tampilan dashboard user beserta perhitungan
            Route::controller(UserDashboardController::class)->group(function(){
                Route::get('/','index')->name('user.index');
                Route::get('user-dashboard/get-data-dashboard','getDataBySearch')->name('user.get-data-dashboard');
            });

            // Tampilan, tambah dan hapus kontak
            Route::controller(UserContactController::class)->group(function(){
                Route::get('user-contact','index')->name('user-contact.index');
                Route::get('user-contact/list-contact','listContact')->name('user-contact.list-contact');
                Route::post('user-contact','store')->name('user-contact.store');
                Route::delete('user-contact/delete','destroy')->name('user-contact.destroy');
                Route::get('user-contact/get-user-contact','getContact')->name('user-contact.get'); // select2
                Route::get('user-contact/cek-contact','cekEmail')->name('user-contact.email');
                Route::get('user-contact/detailContact','detailContact')->name('user-contact.detail-contact');
            });

            // Tampilan transaksi, bayar, update status pengiriman dan refund
            Route::controller(UserTransactionController::class)->group(function(){
                Route::get('transaction-tracking','transactionTracking')->name('user.transaction-tracking');
                Route::get('user-transaction/detail-transaksi/{id}','show')->name('user-transaction.show');
            });

            // Pembeli
            Route::controller(PembeliController::class)->group(function(){
                Route::get('user-pembeli','indexPembeli')->name('user-pembeli.index');
                Route::get('user-pembeli/list-pembeli','listPembeli')->name('user-pembeli.list-pembeli');
                Route::get('user-pembeli/tambah-transaksi','create')->name('user-pembeli.create');
                Route::post('user-pembeli','store')->name('user-pembeli.store');
                Route::put('user-pembeli/bayar-transaksi','payTransaction')->name('user-pembeli.pay');
                Route::put('user-pembeli/batal-pembayaran','cancelPayment')->name('user-pembeli.cancel-payment');
                Route::put('user-pembeli/batal-transaksi','cancelTransaction')->name('user-pembeli.cancel-transaction');
                Route::put('user-pembeli/transaksi-pending', 'pendingTransaction')->name('user-pembeli.pending');
                Route::put('user-pembeli/transaksi-error','onErrorTransaction')->name('user-pembeli.error');
                Route::put('user-pembeli/transaksi-close','onCloseTransaction')->name('user-pembeli.close');
                Route::put('user-pembeli/transaksi-selesai','finishTransaction')->name('user-pembeli.finish');
            });

            // Penjual
            Route::controller(PenjualController::class)->group(function(){
                Route::get('user-penjual','indexPenjual')->name('user-penjual.index');
                Route::get('user-penjual/list-penjual','listPenjual')->name('user-penjual.list-penjual');
                Route::put('user-penjual/tolak-transaksi','denyTransaction')->name('user-penjual.deny');
                Route::put('user-penjual/terima-transaksi','acceptTransaction')->name('user-penjual.accept');
                Route::put('user-penjual/kirim-pesanan','sendingOrder')->name('user-penjual.sending');
                Route::put('user-penjual/terima-uang','acceptResult')->name('user-penjual.accept-result');
                Route::post('user-penjual/selesai-kirim-pesanan','sentOrder')->name('user-penjual.sent');
            });

            // Tampilan refund
            Route::controller(UserRefundController::class)->group(function(){
                Route::get('user-refund','index')->name('user-refund.index');
                Route::get('user-refund/list-refund','listRefund')->name('user-refund.list-refund');
                Route::get('user-refund/ajukan-komplain/{id}','create')->name('user-refund.create');
                Route::get('user-refund/detail-refund/{id}','show')->name('user-refund.show');
                Route::post('user-refund','store')->name('user-refund.store');
            });

            Route::controller(UserNotification::class)->group(function(){
                Route::get('user-notification','index')->name('user-notification.index');
                Route::get('user-notification/list-notification','listNotification')->name('user-notification.list-notification'); // untuk di index
                Route::get('user-notification/detail-notification/{id}','show')->name('user-notifiaction.detail-notification');
                Route::get('user-notification/latest-notification','latestNotification')->name('user-notification.latest-notification');
                Route::get('user-notification/mark-all-as-read','markAllAsRead')->name('user.notification.mark-all-as-read');
                Route::get('user-notification/update-new-notification','updateNewNotification')->name('user-notification.update-new-notification');
                Route::get('user-notification/update-notification-to-admin','updateNotificationToAdmin')->name('user-notification.update-notification-to-admin');
            });
        });
    });
});