<?php

namespace App\Controllers\Admin;

use App\Controllers\BaseController;
use App\Models\CompanyModel;
use App\Models\ExpenseModel;
use App\Models\InvoiceModel;

/**
 * تقرير الأرباح الحقيقي:
 * الإيرادات (فواتير مدفوعة) - تكلفة المنتجات المباعة (COGS) - المصروفات العامة = صافي الربح
 * تكلفة المنتجات المباعة = مجموع (سعر شراء المنتج) لكل بند فاتورة مرتبط بمنتج له سعر شراء.
 */
class ReportController extends BaseController
{
    public function profit()
    {
        $companyId = $this->currentCompanyId();
        $from = $this->request->getGet('from') ?: date('Y-m-01');
        $to = $this->request->getGet('to') ?: date('Y-m-t');
        $company = $companyId ? (new CompanyModel())->find($companyId) : null;

        $db = \Config\Database::connect();

        // الإيرادات: فواتير مدفوعة بالفترة
        $revenue = (float) ($db->table('invoices')
            ->selectSum('amount')
            ->where('company_id', $companyId)
            ->where('status', 'paid')
            ->where('paid_at >=', $from)
            ->where('paid_at <=', $to . ' 23:59:59')
            ->get()->getRow('amount') ?? 0);

        // تكلفة المنتجات المباعة: بنود فواتير (مدفوعة) مرتبطة بمنتج له سعر شراء
        $cogsRow = $db->table('invoice_items ii')
            ->select('SUM(p.cost_price) as total_cost, COUNT(*) as items_count')
            ->join('invoices i', 'i.id = ii.invoice_id')
            ->join('products p', 'p.id = ii.product_id')
            ->where('i.company_id', $companyId)
            ->where('i.status', 'paid')
            ->where('i.paid_at >=', $from)
            ->where('i.paid_at <=', $to . ' 23:59:59')
            ->get()->getRowArray();

        $cogs = (float) ($cogsRow['total_cost'] ?? 0);

        // المصروفات العامة بالفترة
        $expenseModel = new ExpenseModel();
        $expenses = (float) ($expenseModel->where('company_id', $companyId)
            ->where('date >=', $from)->where('date <=', $to)
            ->selectSum('amount')->first()['amount'] ?? 0);

        $grossProfit = $revenue - $cogs;
        $netProfit = $grossProfit - $expenses;

        // تفصيل ربحية كل منتج بالفترة
        $productBreakdown = $db->table('invoice_items ii')
            ->select('p.name, p.cost_price, COUNT(*) as sold_count, SUM(ii.amount) as total_revenue, SUM(p.cost_price) as total_cost')
            ->join('invoices i', 'i.id = ii.invoice_id')
            ->join('products p', 'p.id = ii.product_id')
            ->where('i.company_id', $companyId)
            ->where('i.status', 'paid')
            ->where('i.paid_at >=', $from)
            ->where('i.paid_at <=', $to . ' 23:59:59')
            ->groupBy('p.id')
            ->get()->getResultArray();

        return view('admin/reports/profit', compact('revenue', 'cogs', 'expenses', 'grossProfit', 'netProfit', 'from', 'to', 'productBreakdown', 'company'));
    }
}
