/* tslint:disable */
/* eslint-disable */
/**
 * CWMS Data API
 * CWMS REST API for Data Retrieval
 *
 * The version of the OpenAPI document: 2.4.0-2026.3.16
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

import { exists, mapValues } from '../runtime';
import {
    Location,
    LocationFromJSON,
    LocationFromJSONTyped,
    LocationToJSON,
} from './Location';

/**
 * 
 * @export
 * @interface Project
 */
export interface Project {
    /**
     * 
     * @type {Location}
     * @memberof Project
     */
    location?: Location;
    /**
     * 
     * @type {number}
     * @memberof Project
     */
    federalCost?: number;
    /**
     * 
     * @type {number}
     * @memberof Project
     */
    nonFederalCost?: number;
    /**
     * 
     * @type {Date}
     * @memberof Project
     */
    costYear?: Date;
    /**
     * 
     * @type {string}
     * @memberof Project
     */
    costUnit?: string;
    /**
     * 
     * @type {number}
     * @memberof Project
     */
    federalOAndMCost?: number;
    /**
     * 
     * @type {number}
     * @memberof Project
     */
    nonFederalOAndMCost?: number;
    /**
     * 
     * @type {string}
     * @memberof Project
     */
    authorizingLaw?: string;
    /**
     * 
     * @type {string}
     * @memberof Project
     */
    projectOwner?: string;
    /**
     * 
     * @type {string}
     * @memberof Project
     */
    hydropowerDesc?: string;
    /**
     * 
     * @type {string}
     * @memberof Project
     */
    sedimentationDesc?: string;
    /**
     * 
     * @type {string}
     * @memberof Project
     */
    downstreamUrbanDesc?: string;
    /**
     * 
     * @type {string}
     * @memberof Project
     */
    bankFullCapacityDesc?: string;
    /**
     * 
     * @type {Location}
     * @memberof Project
     */
    pumpBackLocation?: Location;
    /**
     * 
     * @type {Location}
     * @memberof Project
     */
    nearGageLocation?: Location;
    /**
     * 
     * @type {Date}
     * @memberof Project
     */
    yieldTimeFrameStart?: Date;
    /**
     * 
     * @type {Date}
     * @memberof Project
     */
    yieldTimeFrameEnd?: Date;
    /**
     * 
     * @type {string}
     * @memberof Project
     */
    projectRemarks?: string;
}

export function ProjectFromJSON(json: any): Project {
    return ProjectFromJSONTyped(json, false);
}

export function ProjectFromJSONTyped(json: any, ignoreDiscriminator: boolean): Project {
    if ((json === undefined) || (json === null)) {
        return json;
    }
    return {
        
        'location': !exists(json, 'location') ? undefined : LocationFromJSON(json['location']),
        'federalCost': !exists(json, 'federal-cost') ? undefined : json['federal-cost'],
        'nonFederalCost': !exists(json, 'non-federal-cost') ? undefined : json['non-federal-cost'],
        'costYear': !exists(json, 'cost-year') ? undefined : (new Date(json['cost-year'])),
        'costUnit': !exists(json, 'cost-unit') ? undefined : json['cost-unit'],
        'federalOAndMCost': !exists(json, 'federal-o-and-m-cost') ? undefined : json['federal-o-and-m-cost'],
        'nonFederalOAndMCost': !exists(json, 'non-federal-o-and-m-cost') ? undefined : json['non-federal-o-and-m-cost'],
        'authorizingLaw': !exists(json, 'authorizing-law') ? undefined : json['authorizing-law'],
        'projectOwner': !exists(json, 'project-owner') ? undefined : json['project-owner'],
        'hydropowerDesc': !exists(json, 'hydropower-desc') ? undefined : json['hydropower-desc'],
        'sedimentationDesc': !exists(json, 'sedimentation-desc') ? undefined : json['sedimentation-desc'],
        'downstreamUrbanDesc': !exists(json, 'downstream-urban-desc') ? undefined : json['downstream-urban-desc'],
        'bankFullCapacityDesc': !exists(json, 'bank-full-capacity-desc') ? undefined : json['bank-full-capacity-desc'],
        'pumpBackLocation': !exists(json, 'pump-back-location') ? undefined : LocationFromJSON(json['pump-back-location']),
        'nearGageLocation': !exists(json, 'near-gage-location') ? undefined : LocationFromJSON(json['near-gage-location']),
        'yieldTimeFrameStart': !exists(json, 'yield-time-frame-start') ? undefined : (new Date(json['yield-time-frame-start'])),
        'yieldTimeFrameEnd': !exists(json, 'yield-time-frame-end') ? undefined : (new Date(json['yield-time-frame-end'])),
        'projectRemarks': !exists(json, 'project-remarks') ? undefined : json['project-remarks'],
    };
}

export function ProjectToJSON(value?: Project | null): any {
    if (value === undefined) {
        return undefined;
    }
    if (value === null) {
        return null;
    }
    return {
        
        'location': LocationToJSON(value.location),
        'federal-cost': value.federalCost,
        'non-federal-cost': value.nonFederalCost,
        'cost-year': value.costYear === undefined ? undefined : (value.costYear.toISOString()),
        'cost-unit': value.costUnit,
        'federal-o-and-m-cost': value.federalOAndMCost,
        'non-federal-o-and-m-cost': value.nonFederalOAndMCost,
        'authorizing-law': value.authorizingLaw,
        'project-owner': value.projectOwner,
        'hydropower-desc': value.hydropowerDesc,
        'sedimentation-desc': value.sedimentationDesc,
        'downstream-urban-desc': value.downstreamUrbanDesc,
        'bank-full-capacity-desc': value.bankFullCapacityDesc,
        'pump-back-location': LocationToJSON(value.pumpBackLocation),
        'near-gage-location': LocationToJSON(value.nearGageLocation),
        'yield-time-frame-start': value.yieldTimeFrameStart === undefined ? undefined : (value.yieldTimeFrameStart.toISOString()),
        'yield-time-frame-end': value.yieldTimeFrameEnd === undefined ? undefined : (value.yieldTimeFrameEnd.toISOString()),
        'project-remarks': value.projectRemarks,
    };
}

