// 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 } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { ConfigService } from '../../../providers/config.service';
import { LayoutService } from '../../../providers/layout.service';
import { WorksiteService } from '../../../providers/worksite.service';
import { SopralluoghiCmpService } from '../../../providers/sopralluoghi-cmp.service';
import { FunctionService } from '../../../providers/function.service';
import { WorksiteCmp, isCantiereChiuso } from '../../../models/worksite-cmp.model';
import { SopralluogoCmp, sopralluogoStatoLabel, sopralluogoStatoColor } from '../../../models/sopralluogo-cmp.model';

@Component({
	selector: 'app-cantiere-detail',
	templateUrl: './cantiere-detail.page.html',
	styleUrls: ['./cantiere-detail.page.scss'],
	standalone: false,
})
export class CantiereDetailPage {
	cmp_id = 0;
	prt_id = 0;
	ws_id = 0;
	ws: WorksiteCmp | null = null;
	sopralluoghi: SopralluogoCmp[] = [];
	loading = false;
	// creazione sopralluogo gated dalla funzione di modulo 'add' (ruolo), oltre che dallo stato del cantiere
	canCreate = false;

	constructor(
		private route: ActivatedRoute,
		private router: Router,
		private config: ConfigService,
		public layout: LayoutService,
		private worksite: WorksiteService,
		private sopralluoghiService: SopralluoghiCmpService,
		private funService: FunctionService,
	) {}

	ionViewWillEnter() {
		this.resolveIds();
		this.layout.setPageConfig({ title: 'Cantiere', showBack: true, backButtonHref: `/portale/${this.prt_id}/company/${this.cmp_id}/service/cantieri/list` });
		this.funService.funzionibyuser('Lista Sopralluoghi').subscribe((res: any[]) => {
			this.canCreate = (res || []).some((f) => f.mdfu_function === 'add');
		});
		this.load();
	}

	private resolveIds() {
		let r: ActivatedRoute | null = this.route;
		while (r) {
			const pm = r.snapshot.paramMap;
			if (pm.get('cmp_id')) this.cmp_id = +(pm.get('cmp_id') as string);
			if (pm.get('prt_id')) this.prt_id = +(pm.get('prt_id') as string);
			if (pm.get('ws_id')) this.ws_id = +(pm.get('ws_id') as string);
			r = r.parent;
		}
	}

	load(ev?: any) {
		this.loading = true;
		this.worksite.getWorksite(this.ws_id).subscribe({
			next: (w) => {
				this.ws = w;
				this.loading = false;
				ev?.target?.complete();
			},
			error: () => {
				this.config.presentToastError('Errore nel caricamento del cantiere');
				this.loading = false;
				ev?.target?.complete();
			},
		});
		this.loadSopralluoghi();
	}

	private loadSopralluoghi() {
		this.sopralluoghiService.getSopralluoghi(this.cmp_id, this.ws_id, 'general').subscribe((rows) => (this.sopralluoghi = rows || []));
	}

	get isChiuso(): boolean {
		return isCantiereChiuso(this.ws);
	}

	get wsStatoLabel(): string {
		switch (this.ws?.ws_stato) {
			case 2:
				return 'Chiuso';
			case 3:
				return 'Provvisorio';
			case 4:
				return 'Completato';
			case 5:
				return 'Sospeso';
			default:
				return 'Aperto';
		}
	}

	get wsStatoColor(): string {
		if (this.ws?.ws_stato === 2) return 'danger';
		if (this.ws?.ws_stato === 5) return 'warning';
		return 'success';
	}

	statoLabel(s: SopralluogoCmp): string {
		return sopralluogoStatoLabel(s.sl_stato);
	}
	statoColor(s: SopralluogoCmp): string {
		return sopralluogoStatoColor(s.sl_stato);
	}

	private base(): string {
		return `/portale/${this.prt_id}/company/${this.cmp_id}/service/sopralluoghi-cmp`;
	}

	apriMappa() {
		if (!this.ws?.ws_latitude || !this.ws?.ws_longitude) return;
		window.open(`https://www.google.com/maps/search/?api=1&query=${this.ws.ws_latitude},${this.ws.ws_longitude}`, '_blank');
	}

	nuovoSopralluogo() {
		if (this.isChiuso) {
			this.config.presentToastWarning('Cantiere chiuso: non è possibile creare sopralluoghi');
			return;
		}
		this.router.navigate([this.base(), 'add'], { queryParams: { ws: this.ws_id } });
	}

	apriSopralluogo(s: SopralluogoCmp) {
		this.router.navigate([this.base(), 'edit', s.sl_id]);
	}
}
