import Collapsible from '@/app/components/collapsible';

const tableDataCSS = 'w-full break-words border-b border-solid border-gray-300 px-2 text-sm';
let einschraenkungen_erlaeuterungen: any = {};

const einschraenkungenText: any = {
  Naturschutz: `Sind durch ein Vorhaben ein Schutzgebiet (z.B. Nationalpark, Europaschutzgebiet, Landschaftsschutzgebiet, Naturschutzgebiet, geschützter Landschafsteil), 
  ein Schutzobjekt (Naturdenkmal) oder streng (geschützte) Tier- und Pflanzenarten betroffen, ist jedenfalls rechtzeitig mit der Magistratsabteilung 22 - Umweltschutz Kontakt aufzunehmen, 
  um eine allfällige naturschutzbehördliche Bewilligungspflicht abklären zu können. Auf folgenden Seiten sind sämtliche Informationen zu Schutzgebieten und –objekten sowie zu den Artenschutzbestimmungen zu finden:`,
  Naturschutz_links: [
    'https://www.wien.gv.at/umweltschutz/naturschutz/gebiet/schutzgebiete.html#schutzgebiete',
    'https://www.wien.gv.at/umweltschutz/naturschutz/biotop/artenschutz.html',
  ],
  'Artesisch gespannte Brunnen': `In einem Umkreis von 100 m Radius wurde mit Bohrungen artesisch gespanntes Grundwasser angetroffen. Bei der Planung und Durchführung zukünftiger Bohrungen in diesem Bereich muss dies berücksichtigt werden.`,
  Karstzonen: `Am Standort treten verkarstungsfähige Gesteine auf. Bohrungen können daher Hohlräume antreffen.`,
  Altlasten: `Es befindet sich eine Altlast am Standort. Weitere Informationen über die Altlasten sind im Altlasten-GIS unter folgendem Link zu finden: `,
  Altlasten_links: 'https://secure.umweltbundesamt.at/altlasten/?servicehandler=publicgis',
  'Unterirdische Bauwerke': `In einem Umkreis von 2 m befindet sich ein unterirdisches Verkehrsbauwerk (entsprechend Digitalem Verkehrsgraph - GIP). Auf diesen Flächen und im Nahbereich ist der Einsatz von Erdwärmesonden ausgeschlossen. 
  Es kann jedoch noch weitere unterirdische Bauwerke wie Tiefgaragen, Verbindungsgänge oder Einbauten im restlichen Stadtgebiet geben, die den Einsatz von Erdwärmesonden beschränken können.`,
};

const hinweiseText: any = {
  Grundwasserchemismus: {
    'Eisen- und Manganausfällung': `Am Standort kann es zu Eisen- und Manganausfällungen in den Brunnen kommen. 
    Diese können mit bestimmten technischen Maßnahmen wie der Luftfreihaltung des Systems von der Entnahme bis zur Rückgabe des Wassers reduziert oder vermieden werden. 
    Jedenfalls wird im Vorfeld eine chemische Analyse des Grundwassers am Standort empfohlen.`,
    Metallkorrosion: `Am Standort kann es zur Metallkorrosion in den Brunnen kommen. Dies kann mit bestimmten technischen Maßnahmen, wie einem Wärmetauscher aus rostfreiem Stahl bzw. einem zusätzlichen Trennwärmetauscher reduziert oder vermieden werden. Jedenfalls wird im Vorfeld eine chemische Analyse des Grundwassers am Standort empfohlen.`,
    'Keine Daten': `Auf Grund fehlender chemischer Wasseranalysen können keine Aussagen zur Grundwasserchemie getroffen werden.`,
    'Kein Risiko durch GW-Chemismus': 'Kein Risiko durch GW-Chemismus',
  },
  Naturdenkmal: `Am Standort gibt es Naturdenkmäler, die eine Nutzung der Oberflächennahen Geothermie eventuell beschränken können.`,
  'Gespannte Grundwasserzone': `Am Standort können gespannte Grundwasserverhältnisse auftreten. Bei der Planung und Durchführung zukünftiger Bohrungen in diesem Bereich muss dies berücksichtigt werden.`,
  Gasvorkommen: `Am Standort können oberflächennahe Gasvorkommen nicht ausgeschlossen werden. Bei der Planung und Durchführung zukünftiger Bohrungen in diesem Bereich muss dies berücksichtigt werden.`,
  'Mehrere Grundwasserstockwerke': `Am Standort können mehrere Grundwasserstockwerke angetroffen werden.`,
};

const getEinschraenkungen = (attributes: any) => {
  let einschraenkungen = [];

  // Wasserschutz- und Wasserschongebiete
  switch (attributes['EWS_01']) {
    case 'Grün':
      einschraenkungen.push(
        <tr className="w-full" key={einschraenkungen.length}>
          <td className={tableDataCSS}>{attributes['Para_01']}</td>
          <td className={tableDataCSS}>{getAmpelText('Grün')}</td>
        </tr>
      );
      break;
    case 'Gelb':
      einschraenkungen.push(
        <tr className="w-full" key={einschraenkungen.length}>
          <td className={tableDataCSS}>
            {attributes['Para_01']}: {attributes['Kat_01']}
          </td>
          <td className={tableDataCSS}>{getAmpelText('Gelb')}</td>
        </tr>
      );
      break;
    case 'Magenta':
      einschraenkungen.push(
        <tr className="w-full" key={einschraenkungen.length}>
          <td className={tableDataCSS}>
            {attributes['Para_01']}: {attributes['Kat_01']}
          </td>
          <td className={tableDataCSS}>{getAmpelText('Magenta')}</td>
        </tr>
      );
      break;
    default:
      break;
  }

  // Altlasten
  switch (attributes['EWS_02']) {
    case 'Gelb':
      einschraenkungen_erlaeuterungen[attributes['Para_02']] = (
        <>
          {einschraenkungenText[attributes['Para_02']]}
          <a href={einschraenkungenText[attributes['Para_02'] + '_links']}>
            {einschraenkungenText[attributes['Para_02'] + '_links']}
          </a>
        </>
      );
      einschraenkungen.push(
        <tr key={einschraenkungen.length} className="w-full">
          <td className={tableDataCSS}>
            {attributes['Para_02']}
            <sup>{Object.keys(einschraenkungen_erlaeuterungen).length}</sup>
          </td>
          <td className={tableDataCSS}>{getAmpelText('Gelb')}</td>
        </tr>
      );
      break;
    default:
      break;
  }

  // Artesisch gespannte Brunnen
  switch (attributes['EWS_03']) {
    case 'Gelb':
      einschraenkungen_erlaeuterungen[attributes['Para_03']] = einschraenkungenText[attributes['Para_03']];
      einschraenkungen.push(
        <tr key={einschraenkungen.length} className="w-full">
          <td className={tableDataCSS}>
            {attributes['Para_03']}
            <sup>{Object.keys(einschraenkungen_erlaeuterungen).length}</sup>
          </td>
          <td className={tableDataCSS}>{getAmpelText('Gelb')}</td>
        </tr>
      );
      break;
    default:
      break;
  }

  // Bergbaugebiete
  switch (attributes['EWS_04']) {
    case 'Gelb':
      einschraenkungen.push(
        <tr key={einschraenkungen.length} className="w-full">
          <td className={tableDataCSS}>{attributes['Para_04']}</td>
          <td className={tableDataCSS}>{getAmpelText('Gelb')}</td>
        </tr>
      );
      break;
    default:
      break;
  }

  // Karstzonen
  switch (attributes['EWS_05']) {
    case 'Gelb':
      einschraenkungen_erlaeuterungen[attributes['Para_05']] = einschraenkungenText[attributes['Para_05']];
      einschraenkungen.push(
        <tr key={einschraenkungen.length} className="w-full">
          <td className={tableDataCSS}>{attributes['Para_05']}</td>
          <td className={tableDataCSS}>{getAmpelText('Gelb')}</td>
        </tr>
      );
      break;
    default:
      break;
  }

  // Naturschutz
  switch (attributes['EWS_06']) {
    case 'Gelb':
      einschraenkungen_erlaeuterungen[attributes['Para_06']] = (
        <>
          Sind durch ein Vorhaben ein Schutzgebiet (z.B. Nationalpark, Europaschutzgebiet, Landschaftsschutzgebiet,
          Naturschutzgebiet, geschützter Landschafsteil), ein Schutzobjekt (Naturdenkmal) oder streng (geschützte) Tier-
          und Pflanzenarten betroffen, ist jedenfalls rechtzeitig mit der Magistratsabteilung 22 - Umweltschutz Kontakt
          aufzunehmen, um eine allfällige naturschutzbehördliche Bewilligungspflicht abklären zu können. Auf folgenden
          Seiten sind sämtliche Informationen zu Schutzgebieten und –objekten sowie zu den Artenschutzbestimmungen zu
          finden:
          <ul className="pt-2">
            <li>
              <a href="https://www.wien.gv.at/umweltschutz/naturschutz/gebiet/schutzgebiete.html#schutzgebiete">
                https://www.wien.gv.at/umweltschutz/naturschutz/gebiet/schutzgebiete.html#schutzgebiete
              </a>
            </li>
            <li>
              <a href="https://www.wien.gv.at/umweltschutz/naturschutz/biotop/artenschutz.html">
                https://www.wien.gv.at/umweltschutz/naturschutz/biotop/artenschutz.html
              </a>
            </li>
          </ul>
        </>
      );

      einschraenkungen.push(
        <tr key={einschraenkungen.length} className="w-full">
          <td className={tableDataCSS}>
            {attributes['Para_06']}
            <sup>{Object.keys(einschraenkungen_erlaeuterungen).length}</sup>:{' '}
            {attributes['Kat_06'].replaceAll(',', ', ')}
          </td>
          <td className={tableDataCSS}>{getAmpelText('Gelb')}</td>
        </tr>
      );
      break;
    default:
      break;
  }

  return einschraenkungen;
};

const getHinweise = (attributes: any) => {
  let hinweise = [];
  if (attributes['Hinweis_01']) {
    hinweise.push(
      <tr key={hinweise.length} className="w-full">
        <td className={tableDataCSS}>{hinweiseText[attributes['Hinweis_01']]}</td>
      </tr>
    );
  }

  if (attributes['Hinweis_02']) {
    hinweise.push(
      <tr key={hinweise.length} className="w-full">
        <td className={tableDataCSS}>{hinweiseText[attributes['Hinweis_02']]}</td>
      </tr>
    );
  }

  if (attributes['Hinweis_03']) {
    hinweise.push(
      <tr key={hinweise.length} className="w-full">
        <td className={tableDataCSS}>{hinweiseText[attributes['Hinweis_03']]}</td>
      </tr>
    );
  }

  return hinweise;
};

export const getAmpelText = (color: string) => {
  switch (color) {
    case 'Grün':
      return 'Nutzung generell möglich';
    case 'Gelb':
      return 'Genauere Beurteilung notwendig';
    case 'Magenta':
      return 'Nutzung generell nicht möglich';
    default:
      return;
  }
};

export const TableAmpelkarteEWS = ({ results }: { results: any }) => {
  let einschraenkungen: any, hinweise: any;
  einschraenkungen_erlaeuterungen = {};

  results.forEach((result: any) => {
    const attributes = result.feature.attributes;
    if (result.layerId === 0) {
      einschraenkungen = getEinschraenkungen(attributes);
    } else {
      hinweise = getHinweise(attributes);
    }
  });

  return (
    <>
      {einschraenkungen && einschraenkungen.length > 0 ? (
        <Collapsible title="Einschränkungen" open={true}>
          <table id={'einschraenkungen-table'} className="table-fixed w-full mb-4">
            <thead>
              <tr>
                <td colSpan={2}></td>
              </tr>
            </thead>
            <tbody>{einschraenkungen}</tbody>
            <tbody>
              {Object.keys(einschraenkungen_erlaeuterungen).length > 0 &&
                Object.keys(einschraenkungen_erlaeuterungen).map((key, index) => {
                  return (
                    <tr key={key} className="w-full">
                      <td colSpan={2} className="w-full break-words border-b border-solid border-gray-300 px-2 text-xs">
                        {index + 1}: {einschraenkungen_erlaeuterungen[key]}
                      </td>
                    </tr>
                  );
                })}
            </tbody>
          </table>
        </Collapsible>
      ) : (
        <Collapsible title="Einschränkungen" open={true}>
          <table id={'einschraenkungen-table'} className="table-fixed w-full mb-4">
            <thead>
              <tr>
                <td></td>
              </tr>
            </thead>
            <tbody>
              <tr className="w-full">
                <td className={tableDataCSS}>An diesem Standort sind keine Einschränkungen bekannt.</td>
              </tr>
            </tbody>
          </table>
        </Collapsible>
      )}
      {hinweise && hinweise.length > 0 ? (
        <Collapsible title="Hinweise" open={true}>
          <table id={'hinweise-table'} className="table-fixed w-full mb-4">
            <thead>
              <tr>
                <td></td>
              </tr>
            </thead>
            <tbody>{hinweise}</tbody>
          </table>
        </Collapsible>
      ) : null}
    </>
  );
};
