<?php

namespace LoftyIDX\includes\common;

use LoftyIDX\includes\LoftyIDXHelpers;

defined('ABSPATH') || exit;

class LoftyIDXListingDetailHelper
{
    const INTERCEPT_MLS = array(
      'listingId' => array(128, 383, 588, 439, 441),
      'soldDate' => array(588),
      'soldPrice' => array(588),
      'hiddenUpdateTime' => array(588, 383)
    );

    public static function createTime($info, $mls_list)
    {
        
        if (!is_array($info) || !is_array($mls_list)) {
            return '';
        }
        
        $targetMls = array_filter($mls_list, function($item) use($info) {
            return isset($info['mlsOrg']['id']) && $item['id'] === $info['mlsOrg']['id'];
        });
        $targetMls = reset($targetMls);
        $is_sold = isset($info["listingStatus"]) && $info["listingStatus"] === 'Sold';
        $days_on_market = $targetMls["daysOnMarket"];
        // daysOnMarket is 1 means hide
        if ($is_sold || $days_on_market) {
            return '';
        }
        if (isset($info['createTimeLong']) || isset($info['chimeFirstInserted'])) {
            if (isset($info['createTimeLong'])) {
                $date = (int)$info['createTimeLong'];
                $label = 'ON MARKET';
                $ms = 'market';
            } else {
                $date = (int)$info['chimeFirstInserted'];
                $label = 'ON SITE';
                $ms = 'site';
            }
            $today = time();
            $marketDate = $date;
            $day = floor(($today - $marketDate / 1000) / 86400); //  Divide the number of seconds by the number of seconds in a day to get the number of days
            $dateOffset = 10;
            if (isset($info['daysOnSite'])) {
                $dateOffset = (int)$info['daysOnSite'];
            }
            if ($day >= 0) {
                if ($day > $dateOffset) {
                    $timeago = $day . ' days on ' . $ms;
                } elseif ($day == 0) {
                    $timeago = ' New on ' . $ms . ' today';
                } elseif ($day == 1) {
                    $timeago = ' New on ' . $ms . ' 1 day ago';
                } else {
                    $timeago = ' New on ' . $ms . ' ' .  $day . ' days ago ' . $day . ' ' . $ms;
                }
                return $label . ': ' . $timeago;
            }
        }
        return '';
    }

    public static function first_group($listing_detail)
    {
        $firstGroup = null;
        $info = !empty($listing_detail["info"]) ? $listing_detail["info"] : array();
        $mlsOrg = isset($info['mlsOrg']) ? $info['mlsOrg'] : [];
        $listingGroups = isset($listing_detail["listingGroups"]) ? $listing_detail["listingGroups"] : [];
        if (!empty($listingGroups)) {
            $customFields = array(
              'mls listing id' => array(
                'mls' => self::INTERCEPT_MLS['listingId'],
                'value' => "MLS® Listing ID"
              )
            );
            $firstGroup = $listingGroups[0];
            if (isset($mlsOrg['showPurchaseType']) && $mlsOrg['showPurchaseType'] == 0) {
                $firstGroup["fields"] = array_filter(
                    $firstGroup["fields"],
                    function ($field) {
                        return $field["name"] != 'Purchase Type';
                    }
                );
            }
            foreach ($firstGroup["fields"] as $field) {

                $name = strtolower($field["name"]);
                if ($name == 'sold date' || $name == 'leased date') {
                    if (!isset($field["value"])) {
                        $field["value"] = date_format(
                            date_create('@' . $field["value"]),
                            'm/d/Y'
                        );
                    }
                }
                if ($name == 'sold price') {
                    if (!isset($info["listingStatus"]) || $info["listingStatus"] != 'Sold') {
                        $field["value"] = '-';
                        continue;
                    }
                    if (isset($info["nodisclosureDes"])) {
                        $note = $info["nodisclosureDes"];
                        $field["value"] = '$ &#xfe61;&#xfe61;&#xfe61;&#xfe61;&#xfe61; (' . $note . ')';
                    } else {
                        $field["value"] = LoftyIDXHelpers::numeral(isset($info["soldPrice"]) ? $info["soldPrice"] : 0, 0);
                    }
                }
                foreach ($customFields as $key => $customField) {
                    if ($key === $name && in_array(LoftyIDXHelpers::get_value_by_path($info, 'mlsOrg.id', 0), $customField['mls'])) {
                        $field["name"] = $customField['value'];
                    }
                }
            }
            if (!isset($info["listingStatus"]) || $info["listingStatus"] != 'Sold') {
                $firstGroup["fields"] = array_filter(
                    $firstGroup["fields"],
                    function ($field) {
                        return strtolower($field["name"]) != 'sold price';
                    }
                );
            }
            if (isset($info["pricePerSqft"]) && $info["pricePerSqft"]) {
                $firstGroup["fields"] = array_filter(
                    $firstGroup["fields"],
                    function ($field) {
                        return $field["name"] != 'Price per Sqft';
                    }
                );
            }
        }
        return $firstGroup;
    }
}
