import type { PaketKode, PrivilegeKode } from '$lib/constants/privilege';

export type IntervalLangganan = 'bulanan' | 'tahunan';
export type StatusLangganan = 'aktif' | 'kedaluwarsa' | 'trial' | 'dibatalkan';

export interface PaketHarga {
	interval: IntervalLangganan;
	harga: number;
}

export interface PaketPrivilege {
	kode: PrivilegeKode;
	nama: string;
	deskripsi: string;
	tipe: 'boolean' | 'number';
	nilai: string;
}

export interface PaketLangganan {
	id: number;
	kode: PaketKode;
	nama: string;
	deskripsi: string;
	urutan: number;
	is_aktif: boolean;
	harga: PaketHarga[];
	privileges: PaketPrivilege[];
}

export interface MemberLangganan {
	id: number;
	member_id: number;
	paket_id: number;
	paket_kode: PaketKode;
	paket_nama: string;
	interval: IntervalLangganan;
	status: StatusLangganan;
	mulai_at: string;
	berakhir_at: string | null;
	keterangan: string;
}

export interface MemberEntitlements {
	paketKode: PaketKode;
	paketNama: string;
	interval: IntervalLangganan | null;
	berakhirAt: string | null;
	privileges: Record<PrivilegeKode, string>;
}

export interface AdminMemberRow {
	id: number;
	nama: string;
	email: string;
	created_at: string;
	paket_kode: PaketKode | null;
	paket_nama: string | null;
	langganan_status: StatusLangganan | null;
	berakhir_at: string | null;
}

export interface AssignLanggananInput {
	memberId: number;
	paketId: number;
	interval: IntervalLangganan;
	berakhirAt?: string | null;
	keterangan?: string;
}
