import { LucideIcon } from 'lucide-react';
import { MenuPlacement } from 'react-select';
import type { Config } from 'ziggy-js';

export interface Auth {
    user: User;
}

export interface BreadcrumbItem {
    title: string;
    href: string;
}

export interface NavGroup {
    title: string;
    items: NavItem[];
}

export interface NavItem {
    title?: string;
    href?: string;
    icon?: LucideIcon | null | string;
    isActive?: boolean;
    children? : NavItem[];
    [key: string]: unknown;
}

export interface SharedData {
    name: string;
    quote: { message: string; author: string };
    auth: Auth;
    ziggy: Config & { location: string };
    sidebarOpen: boolean;
    [key: string]: unknown;
}

export interface User {
    id?: number;
    username?: string;
    password?: string;
    name?: string;
    email?: string;
    username?: string;
    pegawai_id?: string;
    pegawai? : Pegawai;
    role? : Role,
    role_id? : number,
    status? : number,
    created_at?: string;
    updated_at?: string;
    [key: string]: unknown; // This allows for additional properties...
}

export interface Pegawai {
    nama? : string
}

export interface Anggota {
    id? : string,
    nik?: string;
    nama_lengkap?: string;
    tempat_lahir?: string;
    tgl_lahir?: string;
    jenis_kelamin? : string;
    alamat?: string;
    kode_pos?: string;
    kelurahan?: string;
    kecamatan?: string;
    kabupaten?: string;
    rt?: string;
    rw?: string;
    status_marital?: number;
    agama?: number;
    pekerjaan?: string;
    lokasi_kerja? : string;
    penghasilan? : string;
    ibu_kandung?: string;
    nomor_telp? : string
    foto? : string
}

export interface ProdukTabungan {
    id?: number;
    nama?: string;
    saldo_minimal?: number;
    admin_bulanan?: number;
    admin_pasif?: number;
    suku_bunga?: number;
    status?: number;
    akun_simpanan_id?: string;
    akun_biaya_bunga_id?: string;
    akun_simpanan?: Akun;
    akun_biaya_bunga?: Akun;
}

export interface Tabungan {
    rekening?: string;
    anggota?: Anggota;
    produk?: ProdukTabungan;
    saldo_akhir?: number;
    saldo_efektif?: number;
    saldo?: number;
    status?: number;
    tgl_buka? : string,
    created_at? : string,
    updated_at? : string,
}

export interface Deposito {
    rekening? : string,
    nomor_bilyet? : string,
    anggota? : Anggota,
    produk? : ProdukDeposito,
    nilai_valuta? : number,
    jkw? : number,
    suku_bunga? : number,
    tgl_valuta? : string,
    tgl_buka? : string,
    tgl_jatuh_tempo? : string,
    tgl_tutup? : string,
    tabungan? : Tabungan,
    rekening_tabungan? : string
    status? : number,
}

export interface ProdukDeposito {
    id? : number,
    nama? : string,
    jkw? : number,
    suku_bunga? : number,
    status? : number,
    akun_jurnal? : Akun,
    akun_jurnal_id? : string,
    akun_biaya_bunga? : Akun
    akun_biaya_bunga_id? : string
}

export interface ReactSelectProps {
    value? : string;
    initialValue? : string;
    onChange? : (value : string) => void;
    disable? : boolean,
    menuPlacement? : MenuPlacement | undefined;
}

export interface NavigationMenuItem {
    id? : number,
    label : string,
    href? : string,
    children? : NavigationMenuItem[],
    checked? : number
}

export interface Role {
    id? : number
    nama? : string
    menu? : Menu[]
}

export interface Menu {
    id? : number
    label? : string
    href? : string
}

export interface Akun {
    id? : number
    kode_akun? : string
    kategori? : string
    nama? : string
    kode_induk? : string
    jurnal? : string
    level? : string
}

export interface PenempatanBank{
    id? : string
    rekening? : string
    nama? : string
    bank? : Bank
    bank_id? : number
    suku_bunga? :number
    tgl_penempatan? : string
    jenis_penempatan? : string
    status? : number
    akun_penempatan? : string
    jurnal? : Akun
    saldo? : number,
    created_at? : string
    updated_at? : string
}

export interface Kas{
    id? : string
    nama? : string
    akun_kas? : string
    jurnal? : Akun
    is_default? : number
    saldo? : number
    status? : number
    created_at? : string
    updated_at? : string
}

export interface Bank{
    id? : string,
    nama? : string,
    alamat? : string,
    nomor_telp? : string
}

export interface TransaksiKas {
    trans_id?: string;
    tabungan?: Tabungan;
    trans_tglbuku?: string;
    nominal?: number;
    kas_id?: string;
    rekening?: string;
    keterangan?: string;
    sumber_kas?: string;
    trans_kode?: string;
    saldo_awal_kas?: number;
    saldo_akhir_kas?: number;
    saldo_awal_akun?: number;
    saldo_akhir_akun?: number;
    akun?: Akun;
    kode_akun?: string;
}

export interface TransaksiKasModel extends TransaksiInterface{
    id? :string
    trans_id? :string
    trans_kode?:string
    akun? : Akun
    akun_id? : string
    masuk?:number
    keluar?:number
    keterangan?:string
    trans_date?:string
    trans_tglbuku?:string
    status?:number,
    user? : User
}

export interface TransaksiPenempatanModel extends TransaksiInterface{
    trans_id? :string
    trans_kode?:string
    akun_debet? : string
    akun_kredit? : string
    penempatan_id? : string
    debet?:number
    kredit?:number
    keterangan?:string
    trans_date?:string
    trans_tglbuku?:string
    status?:number,
    user? : User
}

export interface TransaksiTabungan {
    tabungan?: Tabungan;
    rekening? : string
    nominal?: number;
    saldo_akhir?: number;
    keterangan?: string;
    trans_kode?: string;
    trans_tglbuku?: string;
}

export interface TransaksiTabunganModel extends TransaksiInterface{
    trans_id? :string
    trans_kode?:string
    rekening?:string
    setor?:number
    tarik?:number
    keterangan?:string
    trans_date?:string
    trans_tglbuku?:string
    status?:number,
    user? : User
}

export interface TransaksiDeposito {
    deposito?: Deposito;
    rekening? : string
    ob_rekening? : string
    tabungan?: Tabungan;
    trans_tglbuku?: string;
    anggota?: Anggota;
    trans_kode?: string;
    produk?: ProdukDeposito;
    tgl_valuta?: string;
    tgl_jatuh_tempo?: string;
    nilai_valuta?: number;
    keterangan?: string;
}

export interface TransaksiDepositoModel extends TransaksiInterface{
    trans_id? :string
    trans_kode?:string
    deposito?: Deposito
    rekening?:string
    setor?:number
    tarik?:number
    pinalti?: number
    bunga?: number
    keterangan?:string
    trans_date?:string
    trans_tglbuku?:string
    status?:number,
    user? : User
}

export interface TransaksiInterface {
    trans_id? : string
    status? : number
}

export interface JurnalTransaksi {
    id?: number;
    trans_id? : string
    trans_kode?: string
    akun : Akun
    akun_jurnal? : string
    rekening? : string
    debet? : number
    kredit? : number
    keterangan? : string
    trans_date? : string
    trans_tglbuku? : string
    user? : User
    status? : number,
    transaksi ? : TransaksiInterface
}

export interface ProfilModel {
    logo?: string;
    nama?: string;
    alamat?: string;
    rt?: string;
    rw?: string;
    kode_pos?: string;
    kelurahan?: string;
    kecamatan?: string;
    kabupaten?: string;
    nomor_telp?: string;
    email?: string;
    website?: string;
}

export interface Neraca {
    tanggal? : string
    aktiva? : Akun[],
    pasiva? : Akun[],
    laba? : Akun[],
    rugi? : Akun[],
}

export interface LabaRugi {
    tanggal? : string
}

export interface UangLogam {
    ul1000?: number;
    ul500?: number;
    ul200?: number;
    ul100?: number;
    ul50?: number;
    ul25?: number;
}

export interface UangKertas {
    uk100000?: number;
    uk75000?: number;
    uk50000?: number;
    uk20000?: number;
    uk10000?: number;
    uk5000?: number;
    uk2000?: number;
    uk1000?: number;
}

export interface Verbal {
    uangLogam?: UangLogam;
    uangKertas?: UangKertas;
    tanggal?: string;
    total_kas_fisik?: number;
    saldo_awal_kas?: number;
    saldo_akhir_kas?: number;
    masuk?: number;
    keluar?: number;
}

export interface Filter {
    jenis_laporan?: string;
    jenis_transaksi?: string;
    tgl_awal?: string;
    tgl_akhir?: string;
    tanggal?: string
    status? : number
    akun? : Akun
    kode_akun? : string
    jenis?:string
}

export interface Statement {
    jenis_transaksi: string;
    data: StatementModel[];
}

export interface StatementModel {
    jenis_transaksi: string;
    masuk: number;
    keluar: number;
    debet: number;
    kredit: number;
    trans_kode: string;
    trans_tglbuku: string;
    trans_date: string;
    keterangan: string;
    rekening: string;
    transaksi: {
        nama: string;
        kode: string;
    };
}
