use Carbon\Carbon;
use App\Models\User;
use App\Models\Package;
use App\Models\Purchase;
use App\Models\UserLedger;

public function interest()
{
    $purchases = Purchase::where('status', 'active')->get();

    foreach ($purchases as $purchase) {
        $user = User::find($purchase->user_id);
        $package = Package::find($purchase->package_id);

        if (!$user || !$package) {
            continue;
        }

        // --- DAILY MODE ---
        if ($package->drop_type === 'daily') {

            if (now()->greaterThanOrEqualTo(Carbon::parse($purchase->date))) {

                $user->receive_able_amount = ($user->receive_able_amount ?? 0) + ($purchase->daily_income ?? 0);
                $user->save();

                $purchase->date = now()->addHours(24);
                $purchase->save();

                $ledger = new UserLedger();
                $ledger->user_id = $user->id;
                $ledger->reason = 'daily income';
                $ledger->perticulation = $package->name . ' daily commission added';
                $ledger->amount = $purchase->daily_income;
                $ledger->credit = $purchase->daily_income;
                $ledger->status = 'approved';
                $ledger->date = now();
                $ledger->save();

                // Check if expired
                if (Carbon::parse($purchase->validity)->isPast()) {
                    $purchase->status = 'inactive';
                    $purchase->save();
                }
            }
        }

        // --- MATURITY MODE ---
        elseif ($package->drop_type === 'maturity') {

            $validUntil = Carbon::parse($purchase->created_at)->addDays((int)$package->validity);

            if (now()->greaterThanOrEqualTo($validUntil)) {

                // Add full commission (commission_with_avg_amount)
                $amount = $package->commission_with_avg_amount;

                $user->receive_able_amount = ($user->receive_able_amount ?? 0) + $amount;
                $user->save();

                // Ledger record
                $ledger = new UserLedger();
                $ledger->user_id = $user->id;
                $ledger->reason = 'maturity income';
                $ledger->perticulation = $package->name . ' maturity commission released';
                $ledger->amount = $amount;
                $ledger->credit = $amount;
                $ledger->status = 'approved';
                $ledger->date = now();
                $ledger->save();

                // Mark purchase as inactive
                $purchase->status = 'inactive';
                $purchase->save();
            }
        }
    }

    return response()->json(['status' => 'ok', 'message' => 'Interest distributed successfully']);
}
