import { ChangeDetectionStrategy, Component, computed, inject, OnInit, signal } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';

// Import dos tipos (assumindo que estão num ficheiro types.ts)
import { PasswordTypeExclusion, TabType } from './types';

@Component({
  selector: 'app-password-management',
  standalone: true,
  imports: [CommonModule, ReactiveFormsModule],
  templateUrl: './password-management.component.html',
  styleUrls: ['./password-management.component.scss'],
  changeDetection: ChangeDetectionStrategy.OnPush,
})
export class PasswordManagementComponent implements OnInit {
  private fb = inject(FormBuilder);

  // --- ESTADO (Signals) ---
  activeTab = signal<TabType>('oportunidades');
  
  passwordTypes = signal<PasswordTypeExclusion[]>([
    { id: '1', code: 'C', description: 'Transferências/ Pagamentos', isMandatory: true },
    { id: '2', code: 'F', description: 'Pedido de Ajuda', isMandatory: true },
  ]);

  // --- FORMULÁRIOS ---
  settingsForm!: FormGroup;

  ngOnInit(): void {
    this.initForm();
  }

  private initForm(): void {
    // Formulário reativo para garantir validação e tipagem rigorosa
    this.settingsForm = this.fb.group({
      eligibilityDays: [1, [Validators.required, Validators.min(0), Validators.max(365)]]
    });
  }

  // --- AÇÕES ---
  setTab(tab: TabType): void {
    this.activeTab.set(tab);
  }

  updateEligibilityDays(delta: number): void {
    const control = this.settingsForm.get('eligibilityDays');
    if (control) {
      const currentValue = control.value || 0;
      const newValue = Math.max(0, currentValue + delta); // Evita números negativos
      control.setValue(newValue);
      control.markAsDirty();
    }
  }

  toggleMandatory(itemToUpdate: PasswordTypeExclusion): void {
    // Atualização imutável do Signal
    this.passwordTypes.update(items => 
      items.map(item => 
        item.id === itemToUpdate.id 
          ? { ...item, isMandatory: !item.isMandatory } 
          : item
      )
    );
    
    // Aqui seria chamado o serviço para atualizar a API
    // this.apiService.updateExclusion(itemToUpdate.id, !itemToUpdate.isMandatory).subscribe(...)
  }
}