// Questo file fa parte di MyTown.
// MyTown è software libero: puoi ridistribuirlo e/o modificarlo secondo
// i termini della GNU Affero General Public License come pubblicata dalla
// Free Software Foundation, versione 3.
// Distribuito senza ALCUNA GARANZIA; vedi la GNU AGPL v3 per i dettagli.
// Copyright (C) Kondor Consulting & Services S.r.l.
// SPDX-License-Identifier: AGPL-3.0-or-later

import { Component, Input } from '@angular/core';
import { IonicModule, ModalController } from '@ionic/angular';
import { FormsModule } from '@angular/forms';
import { CommonModule } from '@angular/common';
import { TranslateModule, TranslateService } from '@ngx-translate/core';

import { ConfigService } from 'src/app/providers/config.service';
import { DatiFiscali } from 'src/app/models/fattura.model';

/**
 * Modale dati fiscali per la richiesta fattura. Mostrata al checkout solo quando i dati
 * del cliente non sono sufficienti (manca P.IVA per azienda o Codice Fiscale per privato,
 * oppure manca il recapito SDI). Ritorna i DatiFiscali via modalCtrl.dismiss(dati,'confirm').
 */
@Component({
	selector: 'app-modal-invoice-request',
	templateUrl: './modal-invoice-request.component.html',
	standalone: true,
	imports: [CommonModule, FormsModule, IonicModule, TranslateModule],
	providers: [TranslateService],
})
export class ModalInvoiceRequestComponent {
	@Input() cmp_id!: number;
	@Input() prefill: DatiFiscali | null = null;

	dati: DatiFiscali = { tipo: 'PRIVATO', nazione: 'IT', codiceDest: '0000000' };

	constructor(
		private modalCtrl: ModalController,
		private configService: ConfigService,
	) {}

	ionViewWillEnter() {
		if (this.prefill) {
			this.dati = { ...this.prefill };
			if (!this.dati.tipo) this.dati.tipo = 'PRIVATO';
			if (!this.dati.nazione) this.dati.nazione = 'IT';
			if (!this.dati.codiceDest) this.dati.codiceDest = '0000000';
		} else {
			const u = this.configService.getUser ? this.configService.getUser() : null;
			if (u) {
				this.dati.nome = u.usr_firstname || '';
				this.dati.cognome = u.usr_lastname || '';
				this.dati.codFiscale = u.usr_codicefiscale || '';
			}
		}
	}

	/** Cambio tipo cliente: azzera l'identità non pertinente e gestisce il codice destinatario. */
	onTipoChange() {
		if (this.dati.tipo === 'PRIVATO') {
			this.dati.pIva = '';
			this.dati.ragioneSociale = '';
			if (!this.dati.codiceDest || !this.dati.codiceDest.trim()) this.dati.codiceDest = '0000000';
		} else {
			this.dati.codFiscale = this.dati.codFiscale; // resta valorizzabile (CF azienda opzionale)
		}
	}

	get valido(): boolean {
		const d = this.dati;
		const idOk = d.tipo === 'AZIENDA' ? !!(d.pIva && d.pIva.trim()) : !!(d.codFiscale && d.codFiscale.trim());
		const recapitoOk = !!(d.pec && d.pec.trim()) || !!(d.codiceDest && d.codiceDest.trim());
		const nomeOk =
			d.tipo === 'AZIENDA'
				? !!(d.ragioneSociale && d.ragioneSociale.trim())
				: !!((d.nome || '').trim() && (d.cognome || '').trim());
		return idOk && recapitoOk && nomeOk;
	}

	conferma() {
		if (!this.valido) return;
		if (this.dati.tipo === 'PRIVATO' && !(this.dati.codiceDest && this.dati.codiceDest.trim())) {
			this.dati.codiceDest = '0000000';
		}
		if (!this.dati.nazione) this.dati.nazione = 'IT';
		this.modalCtrl.dismiss(this.dati, 'confirm');
	}

	annulla() {
		this.modalCtrl.dismiss(null, 'cancel');
	}
}
