<?php

namespace App\Filament\Admin\Resources\InvoiceReportResource\RelationManagers;

use App\Filament\Admin\Resources\InvoiceResource;
use App\Models\Invoice;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Support\Enums\FontWeight;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;

class InvoicesRelationManager extends RelationManager
{
    protected static string $relationship = 'invoices';

    public function form(Form $form): Form
    {
        return $form
            ->schema([
                Forms\Components\TextInput::make('id')
                    ->required()
                    ->maxLength(255),
            ]);
    }

    public function table(Table $table): Table
    {
        return $table
            ->recordTitleAttribute('internal_id')
            ->recordUrl(fn ($record) => InvoiceResource::getUrl('edit', ['record' => $record->id]))
            ->columns([
                TextColumn::make('internal_id')
                    ->label('ID')
                    ->extraHeaderAttributes(['class' => 'w-full'])
                    ->color('primary'),

                TextColumn::make('date')
                    ->label('Created')
                    ->date('Y-m-d'),

                TextColumn::make('subtotal')
                    ->alignRight()
                    ->money(),

                TextColumn::make('gst_amount')
                    ->label('GST/HST')
                    ->getStateUsing(function (Invoice $record) {
                        return $record->has_gst
                            ? '$'.number_format($record->gst_amount, 2)
                            : ($record->has_hst ? '$'.number_format($record->hst_amount, 2) : '-');
                    })
                    ->alignRight()
                    ->money(),

                TextColumn::make('pst_amount')
                    ->label('PST')
                    ->alignRight()
                    ->formatStateUsing(function ($state) {
                        return $state == 0.00 ? '-' : '$'.$state;
                    }),

                TextColumn::make('total')
                    ->money()
                    ->alignRight()
                    ->weight(FontWeight::Medium),

                TextColumn::make('balance')
                    ->alignRight()
                    ->getStateUsing(fn (Invoice $record) => $record->remainingBalance())
                    ->money()
                    ->weight(FontWeight::Bold),
                TextColumn::make('status'),
            ])
            ->filters([
                //
            ])
            ->headerActions([
            ])
            ->defaultSort('invoices.id')
            ->actions([
            ])
            ->bulkActions([
            ]);
    }
}